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
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With