排序列和创建排名变量的最有效方法

时间:2016-05-09 09:17:45

标签: r

我有一个包含多个列的数据框。我想创建一个函数/循环,或者更有效地获取数据框,排序列,根据该顺序创建变量排名(名称如rank_columnname)并将其添加到数据框中。

dat <- data.frame(indi1=rnorm(10),indi2=rnorm(10))

dat1 <- dat[order(dat$indi1), ]
dat1$rank_indi <- 1:nrow(dat)
dat2 <- dat1[order(dat1$indi2), ]
dat2$rank_indi2 <- 1:nrow(dat2)

这个例子做了我想要的,但是以一种麻烦的方式。我尝试过使用lapply,但似乎无法使用名称相似的新列更新数据框。

感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

这是一个插入“rank_indi”变量的简单循环:

for(i in names(dat)){
  dat[order(dat[,i]),paste0("rank_", i)] <- 1:nrow(dat)
} 


dat
         indi1      indi2 rank_indi1 rank_indi2
1   1.45829065 -0.3322692         10          2
2   0.55972129  2.5031318          7         10
3   0.45870293 -0.6216859          6          1
4   1.03814922  1.4284271          9          8
5  -0.75211259  0.5600499          3          4
6  -1.89298552  0.8047825          2          6
7   0.03843679  0.6593377          5          5
8  -0.09808913  0.2513729          4          3
9   0.97862797  2.2650003          8          9
10 -2.07767889  1.0684134          1          7

编辑:在早期的代码

中犯了一个错误