How to extract data.table columns using a vector of column numbers in R?


When we have large number of columns and only few of them are useful for analysis then extraction of such columns becomes helpful.

If we have a vector that contains column numbers and we want to extract the columns from a data.table object then we can use the single square brackets for subsetting of columns as shown in the below given examples.

Example 1

Following snippet creates data.table object and Vector1 −

x1<-rnorm(20)
x2<-rnorm(20)
x3<-rnorm(20)
library(data.table)
DT1<-data.table(x1,x2,x3)
DT1

The following data.table is created −

         x1            x2          x3
1:   0.0009381365   2.38415205  -0.02421045
2:   1.3963732982   0.16346377   1.16961063
3:   1.4794367338  -0.50184674   1.18231067
4:  -1.9793913612  -0.98075371   0.44866840
5:  -0.1299546054  -0.26863505  -0.19340686
6:  -0.2923916937  -0.33906997  -1.77214169
7:   0.1720752818  -2.05508910  -1.05303964
8:   1.5915013897  -0.27355865   1.44198910
9:  -0.2166748864  -1.37819971   0.58816401
10:  0.0715535192   0.84845987  -0.65939784
11: -0.5288076065  -0.04512962   1.27697852
12: -1.3884578057   1.95875321  -0.34228758
13:  1.2654508300  -1.69302356   0.32258719
14: -1.4042497824  -1.38131322  -0.97760370
15:  2.0428827104  -0.68046057  -1.82713480
16: -0.2539994598  -0.57296756   0.55544471
17: -0.7818319402   0.99196597   2.21323456
18:  0.7471519703   3.47030275  -1.63994775
19: -0.3480969922   1.15902926   0.89007240
20:  0.2845669502  -1.41614250  -1.69392436

In order to extract columns of DT1 using Vector1, add the following code to the above snippet −

Vector1<-c(1,3)
DT1[,..Vector1]

Output

If you execute all the above given snippets as a single program, it generates the following output −

          x1          x3
1:   0.0009381365  -0.02421045
2:   1.3963732982   1.16961063
3:   1.4794367338   1.18231067
4:  -1.9793913612   0.44866840
5:  -0.1299546054  -0.19340686
6:  -0.2923916937  -1.77214169
7:   0.1720752818  -1.05303964
8:   1.5915013897   1.44198910
9:  -0.2166748864   0.58816401
10:  0.0715535192  -0.65939784
11: -0.5288076065   1.27697852
12: -1.3884578057  -0.34228758
13:  1.2654508300   0.32258719
14: -1.4042497824  -0.97760370
15:  2.0428827104  -1.82713480
16: -0.2539994598   0.55544471
17: -0.7818319402   2.21323456
18:  0.7471519703  -1.63994775
19: -0.3480969922   0.89007240
20:  0.2845669502  -1.69392436

Example 2

Following snippet creates data.table object and Vector2 −

y1<-rpois(20,5)
y2<-rpois(20,2)
y3<-rpois(20,1)
y4<-rpois(20,8)
DT2<-data.table(y1,y2,y3,y4)
DT2

The following data.table is created −

    y1 y2 y3 y4
1:  5  1  1  8
2:  4  2  2  9
3:  7  4  0  6
4:  3  2  2  7
5:  5  2  1  9
6:  8  0  0  6
7:  3  0  2  9
8:  5  3  1 11
9:  5  0  1  9
10: 4  2  1  5
11: 4  2  0  7
12: 8  3  2  8
13: 1  3  4 11
14: 8  1  4  7
15: 4  3  0 10
16: 5  1  2 14
17: 7  5  0  9
18: 4  3  1  8
19: 8  3  1  9
20: 3  2  1  8

In order to extract columns of DT2 using Vector2, add the following code to the above snippet −

Vector2<-c(2:4)
DT2[,..Vector2]

Output

If you execute all the above given snippets as a single program, it generates the following output −

    y2 y3 y4
1:  1  1  8
2:  2  2  9
3:  4  0  6
4:  2  2  7
5:  2  1  9
6:  0  0  6
7:  0  2  9
8:  3  1 11
9:  0  1  9
10: 2  1  5
11: 2  0  7
12: 3  2  8
13: 3  4 11
14: 1  4  7
15: 3  0 10
16: 1  2 14
17: 5  0  9
18: 3  1  8
19: 3  1  9
20: 2  1  8

Updated on: 05-Nov-2021

531 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements