基于多列对Data.Table进行排序

Mah*_*oud 5 sorting r 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
Run Code Online (Sandbox Code Playgroud)

我想根据第 3 列和第 1 列对行进行排序。我可以使用:

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
Run Code Online (Sandbox Code Playgroud)

但是,如果 DT 有很多列并且假设我想根据第 1 到第 i 列对它们进行排序,那么将其写为:

DT[order(DT[,1], DT[,2], DT[,3], ... DT[,i])]
Run Code Online (Sandbox Code Playgroud)

相反,我想提供列索引作为向量(见下文):

DT[order(DT[,c(1:i)])]
Run Code Online (Sandbox Code Playgroud)

但是,它不像我期望的那样工作,输出是:

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
Run Code Online (Sandbox Code Playgroud)

关于我如何解决这个问题的任何建议?谢谢!

akr*_*run 6

我们可以在指定之后使用do.callwithorder.SDcols

DT[DT[,do.call(order, .SD), .SDcols = c(3, 1)]]
#   a  b  c
#1: 2  4  1
#2: 1  3  2
#3: 5  2  3
#4: 3 NA NA
#5: 4  5 NA
Run Code Online (Sandbox Code Playgroud)