如何通过删除特定列在R中对data.table进行子集化?

在获得了数据框架的经验之后,人们通常会转向data.table对象,因为与数据框架相比,使用data.table对象更容易。我们还需要创建一个data.table对象的子集,并且可以使用方括号轻松实现。例如,如果我们有一个名为DT的data.table对象,其中包含10列,并且我们想要创建1到8列的子集,则可以使用DT [,-c(9,10),with = FALSE]创建该子集。

示例

library(data.table)
x1<−rnorm(20,1,0.5)
x2<−rnorm(20,1,0.45)
x3<−rpois(20,10)
x4<−rpois(20,5)
x5<−rpois(20,8)
x6<−rexp(20,1.15)
x7<−sample(0:9,20,replace=TRUE)
x8<−sample(41:49,20,replace=TRUE)
DT<−data.table(x1,x2,x3,x4,x5,x6,x7,x8)
DT

输出结果

x1 x2 x3 x4 x5 x6 x7 x8
1: 0.3816564 0.8224154 11 5 9 0.02823792 6 44
2: 1.2498355 1.3669585 9 5 15 1.41967863 8 45
3: 1.7661182 1.1508072 14 8 3 0.99296213 7 44
4: 0.4679560 1.9738294 9 6 8 1.30810100 0 46
5: 1.2634799 1.7418108 8 2 10 1.57067044 0 44
6: 0.5271280 0.7788231 15 4 9 0.85467421 3 42
7: 1.1978085 1.1891952 10 4 9 0.76186350 9 44
8: 0.5582059 1.2431360 12 4 7 1.60622936 0 43
9: 0.5003223 0.9426929 11 8 13 1.86129287 2 46
10: 0.5168766 0.8995718 8 3 7 0.66378569 6 48
11: 1.2805334 1.0410280 9 2 7 0.78355511 0 48
12: 1.5555755 1.2342420 10 7 2 3.99523338 6 45
13: 1.0936011 2.1838511 12 10 7 0.31020687 5 48
14: 0.8434001 0.6962775 19 5 8 1.12643977 8 41
15: 0.4765863 1.1157518 8 6 9 0.72010177 4 45
16: 0.9317724 0.8178368 6 6 7 0.55444159 4 48
17: 1.5397574 1.2234017 11 4 6 0.29338357 3 41
18: 0.7530927 1.4972635 8 8 12 0.27459776 9 43
19: 1.3672898 1.6516958 14 6 7 2.99439984 0 48
20: 0.3179253 0.5976030 7 5 7 0.55743554 8 44

子集除1和2以外的所有列-

DT[,−c(1,2),with=FALSE]

输出结果

x3 x4 x5 x6 x7 x8
1: 11 5 9 0.02823792 6 44
2: 9 5 15 1.41967863 8 45
3: 14 8 3 0.99296213 7 44
4: 9 6 8 1.30810100 0 46
5: 8 2 10 1.57067044 0 44
6: 15 4 9 0.85467421 3 42
7: 10 4 9 0.76186350 9 44
8: 12 4 7 1.60622936 0 43
9: 11 8 13 1.86129287 2 46
10: 8 3 7 0.66378569 6 48
11: 9 2 7 0.78355511 0 48
12: 10 7 2 3.99523338 6 45
13: 12 10 7 0.31020687 5 48
14: 19 5 8 1.12643977 8 41
15: 8 6 9 0.72010177 4 45
16: 6 6 7 0.55444159 4 48
17: 11 4 6 0.29338357 3 41
18: 8 8 12 0.27459776 9 43
19: 14 6 7 2.99439984 0 48
20: 7 5 7 0.55743554 8 44

子集除1和8以外的所有列-

DT[,−c(1,8),with=FALSE]

输出结果

x2 x3 x4 x5 x6 x7
1: 0.8224154 11 5 9 0.02823792 6
2: 1.3669585 9 5 15 1.41967863 8
3: 1.1508072 14 8 3 0.99296213 7
4: 1.9738294 9 6 8 1.30810100 0
5: 1.7418108 8 2 10 1.57067044 0
6: 0.7788231 15 4 9 0.85467421 3
7: 1.1891952 10 4 9 0.76186350 9
8: 1.2431360 12 4 7 1.60622936 0
9: 0.9426929 11 8 13 1.86129287 2
10: 0.8995718 8 3 7 0.66378569 6
11: 1.0410280 9 2 7 0.78355511 0
12: 1.2342420 10 7 2 3.99523338 6
13: 2.1838511 12 10 7 0.31020687 5
14: 0.6962775 19 5 8 1.12643977 8
15: 1.1157518 8 6 9 0.72010177 4
16: 0.8178368 6 6 7 0.55444159 4
17: 1.2234017 11 4 6 0.29338357 3
18: 1.4972635 8 8 12 0.27459776 9
19: 1.6516958 14 6 7 2.99439984 0
20: 0.5976030 7 5 7 0.55743554 8

子集除5到8之外的所有列-

DT[,−c(5:8),with=FALSE]

输出结果

x1 x2 x3 x4
1: 0.3816564 0.8224154 11 5
2: 1.2498355 1.3669585 9 5
3: 1.7661182 1.1508072 14 8
4: 0.4679560 1.9738294 9 6
5: 1.2634799 1.7418108 8 2
6: 0.5271280 0.7788231 15 4
7: 1.1978085 1.1891952 10 4
8: 0.5582059 1.2431360 12 4
9: 0.5003223 0.9426929 11 8
10: 0.5168766 0.8995718 8 3
11: 1.2805334 1.0410280 9 2
12: 1.5555755 1.2342420 10 7
13: 1.0936011 2.1838511 12 10
14: 0.8434001 0.6962775 19 5
15: 0.4765863 1.1157518 8 6
16: 0.9317724 0.8178368 6 6
17: 1.5397574 1.2234017 11 4
18: 0.7530927 1.4972635 8 8
19: 1.3672898 1.6516958 14 6
20: 0.3179253 0.5976030 7 5

子集除2、4、7和8之外的所有列-

DT[,−c(2,4,7,8),with=FALSE]

输出结果

x1 x3 x5 x6
1: 0.3816564 11 9 0.02823792
2: 1.2498355 9 15 1.41967863
3: 1.7661182 14 3 0.99296213
4: 0.4679560 9 8 1.30810100
5: 1.2634799 8 10 1.57067044
6: 0.5271280 15 9 0.85467421
7: 1.1978085 10 9 0.76186350
8: 0.5582059 12 7 1.60622936
9: 0.5003223 11 13 1.86129287
10: 0.5168766 8 7 0.66378569
11: 1.2805334 9 7 0.78355511
12: 1.5555755 10 2 3.99523338
13: 1.0936011 12 7 0.31020687
14: 0.8434001 19 8 1.12643977
15: 0.4765863 8 9 0.72010177
16: 0.9317724 6 7 0.55444159
17: 1.5397574 11 6 0.29338357
18: 0.7530927 8 12 0.27459776
19: 1.3672898 14 7 2.99439984
20: 0.3179253 7 7 0.55743554