How to select only one column from an R data frame and return it as a data frame instead of vector?

R ProgrammingServer Side ProgrammingProgramming

Generally, if we extract a single column from an R data frame then it is extracted as a vector but we might want it in data frame form so that we can apply operations of a data frame on it. Therefore, we can use single square brackets for the extraction with T (TRUE) or (FALSE) values and drop = FALSE so that the output becomes a data frame.

Consider the below data frame −

Example

 Live Demo

set.seed(999)
x1<-rnorm(20,5,1)
x2<-rnorm(20,5,2)
x3<-rnorm(20,10,2)
x4<-rnorm(20,10,1.5)
x5<-rnorm(20,10,4)
df1<-data.frame(x1,x2,x3,x4,x5)
df1

Output

       x1      x2        x3     x4      x5
1 4.718260 2.542873 9.028727 8.615033 7.428309
2 3.687440 6.286089 10.016996 11.747431 13.941194
3 5.795184 4.280474 7.435773 11.563103 5.085707
4 5.270070 5.588071 7.776842 11.655743 10.340899
5 4.722694 2.749463 10.601331 9.972138 5.183625
6 4.433976 6.284531 10.552958 8.279563 8.492609
7 3.121342 2.786525 5.898245 7.887731 15.454594
8 3.733209 3.230319 10.028380 9.576507 8.988469
9 4.032250 1.891810 11.164533 9.373345 14.025960
10 3.878991 4.746642 9.930547 11.494995 11.748597
11 6.325464 9.765328 9.766672 9.840571 16.634154
12 5.133977 6.202552 8.710036 9.895897 10.110741
13 5.938749 5.358723 13.488823 11.424552 6.085122
14 5.172538 7.161063 10.732189 9.375201 15.134917
15 5.957650 4.506376 9.866380 11.461001 5.481034
16 3.637314 0.772526 10.565225 10.093437 14.186631
17 5.068335 4.258945 11.135390 10.807633 7.688271
18 5.100658 6.045736 7.441568 6.902765 8.824823
19 5.901345 6.035611 10.870738 10.654647 9.032894
20 2.925643 2.194978 8.868998 9.759660 10.879791

Extracting column x1 −

df1[,c(T,F,F,F,F)]

[1] 4.718260 3.687440 5.795184 5.270070 4.722694 4.433976 3.121342 3.733209
[9] 4.032250 3.878991 6.325464 5.133977 5.938749 5.172538 5.957650 3.637314
[17] 5.068335 5.100658 5.901345 2.925643

is.vector(df1[,c(T,F,F,F,F)]) [1] TRUE

Extracting column x1 as a data frame −

df1[,c(T,F,F,F,F),drop=FALSE]

x1
1 4.718260
2 3.687440
3 5.795184
4 5.270070
5 4.722694
6 4.433976
7 3.121342
8 3.733209
9 4.032250
10 3.878991
11 6.325464
12 5.133977
13 5.938749
14 5.172538
15 5.957650
16 3.637314
17 5.068335
18 5.100658
19 5.901345
20 2.925643

Extracting different columns in the same way −

df1[,c(F,T,F,F,F),drop=FALSE]

  x2
1 2.542873
2 6.286089
3 4.280474
4 5.588071
5 2.749463
6 6.284531
7 2.786525
8 3.230319
9 1.891810
10 4.746642
11 9.765328
12 6.202552
13 5.358723
14 7.161063
15 4.506376
16 0.772526
17 4.258945
18 6.045736
19 6.035611
20 2.194978

df1[,c(F,F,T,F,F),drop=FALSE]

x3
1 9.028727
2 10.016996
3 7.435773
4 7.776842
5 10.601331
6 10.552958
7 5.898245
8 10.028380
9 11.164533
10 9.930547
11 9.766672
12 8.710036
13 13.488823
14 10.732189
15 9.866380
16 10.565225
17 11.135390
18 7.441568
19 10.870738
20 8.868998

df1[,c(F,F,F,F,T),drop=FALSE]

x5
1 7.428309
2 13.941194
3 5.085707
4 10.340899
5 5.183625
6 8.492609
7 15.454594
8 8.988469
9 14.025960
10 11.748597
11 16.634154
12 10.110741
13 6.085122
14 15.134917
15 5.481034
16 14.186631
17 7.688271
18 8.824823
19 9.032894
20 10.879791
raja
Published on 10-Oct-2020 13:20:00
Advertisements