如何使用存储在R中的向量中的列名按升序对data.table对象的列进行排序?

使用列号对data.table对象的列进行排序很容易,但是使用列名进行排序却有所不同。如果列名称存储在向量中,并且我们希望data.table使用该名称以升序对对象列进行排序,则将在单方括号和双方括号中使用order函数,如以下示例所示。

加载data.table包并创建一个data.table对象-

示例

library(data.table)
x1<-rpois(20,1)
x2<-rpois(20,5)
DT1<-data.table(x1,x2)
DT1
输出结果
    x1 x2
1:  1  3
2:  1  6
3:  2  3
4:  0  7
5:  1  8
6:  0  5
7:  1  3
8:  0  4
9:  1  2
10: 0  6
11: 0  5
12: 0  4
13: 2  6
14: 0  6
15: 2  0
16: 0  2
17: 1  6
18: 0  6
19: 2  7
20: 2  2

Column_for_sorting <-“ x2”

使用Column_for_sorting对DT1进行排序-

示例

DT1[order(DT1[[Column_for_sorting]])]
输出结果
   x1  x2
1:  2  0
2:  1  2
3:  0  2
4:  2  2
5:  1  3
6:  2  3
7:  1  3
8:  0  4
9:  0  4
10: 0  5
11: 0  5
12: 1  6
13: 0  6
14: 2  6
15: 0  6
16: 1  6
17: 0  6
18: 0  7
19: 2  7
20: 1  8

示例

y1<-rnorm(20)
y2<-rnorm(20)
DT2<-data.table(y1,y2)
DT2
输出结果
        y1           y2
1:   0.3499126    1.6988660
2:  -0.6970935   -1.2961417
3:   0.1244235    1.1192189
4:  -1.0639993    0.2504188
5:  -0.5714189    0.9772097
6:   1.3096543    1.5397439
7:   0.1163726   -2.8518334
8:  -1.2941302    0.6353213
9:  -0.4853220   -0.2274419
10: -0.3999413   -0.4259027
11:  2.9027999    0.2589249
12:  1.6724920   -1.2572220
13:  0.8792422   -0.5715381
14:  1.3257716    1.4083895
15: -0.9301681    0.1565980
16: -1.3777834    0.3630332
17:  0.1585897   -1.7692727
18: -2.7972968   -0.3854796
19: -1.4035229   -0.9016175
20:  1.4411729    0.1969444

Column_for_sorting <-“ y1”

使用Column_for_sorting对DT2进行排序-

示例

DT2[order(DT2[[Column_for_sorting]])]
输出结果
        y1          y2
1:  -2.7972968   -0.3854796
2:  -1.4035229   -0.9016175
3:  -1.3777834    0.3630332
4:  -1.2941302    0.6353213
5:  -1.0639993    0.2504188
6:  -0.9301681    0.1565980
7:  -0.6970935   -1.2961417
8:  -0.5714189    0.9772097
9:  -0.4853220   -0.2274419
10: -0.3999413   -0.4259027
11:  0.1163726   -2.8518334
12:  0.1244235    1.1192189
13:  0.1585897   -1.7692727
14:  0.3499126    1.6988660
15:  0.8792422   -0.5715381
16:  1.3096543    1.5397439
17:  1.3257716    1.4083895
18:  1.4411729    0.1969444
19:  1.6724920   -1.2572220
20:  2.9027999    0.2589249