考虑下面的一个data.table:
但是,它并没有按照我的期望工作,并输出了:
有什么建议可以解决这个问题吗?谢谢!
DT <- data.table(a=c(1,2,4,3,5), b=c(3:5,NA,2), c=c(2,1,NA,NA,3))
DT
a b c
1: 1 3 2
2: 2 4 1
3: 4 5 NA
4: 3 NA NA
5: 5 2 3
我希望按照第三列和第一列的顺序对行进行排序。我可以使用以下方法:
DT[order(DT[,3],DT[,1])]
a b c
1: 2 4 1
2: 1 3 2
3: 5 2 3
4: 3 NA NA
5: 4 5 NA
但是,如果DT有许多列,假设我想根据第1到第i列对它们进行排序,那么将它们写成这样并不高效:
DT[order(DT[,1], DT[,2], DT[,3], ... DT[,i])]
相反,我想提供列索引作为向量(见下文):
DT[order(DT[,c(1:i)])]
但是,它并没有按照我的期望工作,并输出了:
DT[order(DT[,c(3,1)])]
a b c
1: 2 4 1
2: NA NA NA
3: 1 3 2
4: NA NA NA
5: 5 2 3
6: NA NA NA
7: NA NA NA
8: NA NA NA
9: 4 5 NA
10: 3 NA NA
有什么建议可以解决这个问题吗?谢谢!
setorderv
函数进行排序:如何按多列对数据框进行排序?。例如,对于一系列的列,比如cols <- names(iris)[2:4]
;可以使用setorderv(iris, cols)
进行排序。 - Henrik?setorderv
? - Henrik