我如何用R rank()函数创建一个新的tie.method?

rey*_*n64 7 sorting select r ranking dataframe

我正在尝试按人口和日期排序这个数据框,所以我正在使用order()rank()函数:

> df <- data.frame(idgeoville = c(5, 8, 4, 3, 4, 5, 8, 8),
                   date       = c(rep(1950, 4), rep(2000, 4)),
                   population = c(500, 450, 350, 350, 650, 500, 500, 450))
> df
   idgeoville date    population
1  5          1950     500
2  8          1950     450
3  4          1950     350
4  3          1950     350
5  4          2000     650
6  5          2000     500
7  8          2000     500
8  8          2000     450
Run Code Online (Sandbox Code Playgroud)

随着ties.method = "first"我没有问题,最后我生产这种数据帧:

   idgeoville date    population  rank
1  5          1950     500        1
2  8          1950     450        2
3  4          1950     350        3
4  3          1950     350        4
5  4          2000     650        1
6  5          2000     500        2
7  8          2000     500        3
8  8          2000     450        4
Run Code Online (Sandbox Code Playgroud)

但实际上,我想要一个具有相同排名的数据帧,以获得相同的人口排名,如下所示:

   idgeoville date    population  rank
1  5          1950     500        1
2  8          1950     450        2
3  4          1950     350        3
4  3          1950     350        3
5  4          2000     650        1
6  5          2000     500        2
7  8          2000     500        2
8  8          2000     450        3
Run Code Online (Sandbox Code Playgroud)

如何用R解决这个问题?使用自定义ties.method()或其他R技巧?

Gre*_*min 6

更简单的方法:

pop.rank <- as.numeric(factor(population))
Run Code Online (Sandbox Code Playgroud)


mbq*_*mbq 4

我相信没有任何选择可以通过等级来做到这一点;这是一个自定义函数,可以执行您想要的操作,但如果您的数据很大,它可能会太慢:

Rank<-function(d) {
    j<-unique(rev(sort(d)));
    return(sapply(d,function(dd) which(dd==j)));
}
Run Code Online (Sandbox Code Playgroud)