Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extract a column from a data.table as a vector, by position

How do I extract a column from a data.table as a vector by its position? Below are some code snippets I have tried:

DT<-data.table(x=c(1,2),y=c(3,4),z=c(5,6)) DT #   x y z #1: 1 3 5 #2: 2 4 6 

I want to get this output using column position

DT$y  #[1] 3 4 is.vector(DT$y) #[1] TRUE 

Other way to get this output using column position

DT[,y]  #[1] 3 4 is.vector(DT[,y]) #[1] TRUE 

This doesn't give a vector

DT[,2,with=FALSE] #   y #1: 3 #2: 4 is.vector(DT[,2,with=FALSE]) #[1] FALSE 

Those two doesn't work:

DT$noquote(names(DT)[2]) # Doesn't work #Error: attempt to apply non-function  DT[,noquote(names(DT)[2])] # Doesn't work #[1] y 

And this doesn't give a vector:

DT[,noquote(names(DT)[2]),with=FALSE] # Not a vector #   y #1: 3 #2: 4 is.vector(DT[,noquote(names(DT)[2]),with=FALSE]) #[1] FALSE 
like image 663
Wet Feet Avatar asked Nov 18 '13 08:11

Wet Feet


People also ask

How do I extract a vector from a Dataframe?

If you want to convert to character vector, just use as. character(myvector) . In conclusion, use dplyr 's pull() function (and input just the column name you want to extract) when you want to extract a vector from a data frame or tibble while in a pipe.


1 Answers

A data.table inherits from class data.frame. Therefore it is a list (of column vectors) internally and can be treated as such.

is.list(DT) #[1] TRUE 

Fortunately, list subsetting, i.e. [[, is very fast and, in contrast to [, package data.table doesn't define a method for it. Thus, you can simply use [[ to extract by an index:

DT[[2]] #[1] 3 4 
like image 155
Roland Avatar answered Oct 23 '22 12:10

Roland