我有一个包含多个列的数据框。我想创建一个函数/循环,或者更有效地获取数据框,排序列,根据该顺序创建变量排名(名称如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,但似乎无法使用名称相似的新列更新数据框。
感谢任何帮助。
答案 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
编辑:在早期的代码
中犯了一个错误