Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get columns by string from data.table [duplicate]

Tags:

r

data.table

raw is a data.table and the following code works:

raw[,r_responseTime] #Returns the whole column
raw[,c_filesetSize]  #Same as above, returns column
plot(raw[,r_responseTime]~raw[,c_filesetSize]) #draws something

Now I want to specify these columns from a string, so for example:

col1="r_reponseTime"
col2="c_filesetSize"

How can I now achieve the same as above while referencing the columns by the string?

raw[,col1] #Returns the whole column
raw[,col2]  #Same as above, returns column
plot(raw[,col1]~raw[,col2]) #draws something

Does not work, of course because I need some kind of "dereferencation". I didn't know what to search in the help and the internet, so sorry for the dumb question.

like image 679
theomega Avatar asked Mar 25 '12 21:03

theomega


3 Answers

A modern approach is to use ..:

raw[ , ..col1]

.. "looks up a level" to find col1.


An older, less preferred alternative is to use the match() function or %in% operator.

raw[, match(col1, names(raw)),with=FALSE]
like image 20
Etienne Low-Décarie Avatar answered Nov 05 '22 05:11

Etienne Low-Décarie


It would be nice if you had provided a reproducible example, or at the very least shown what the column names of raw are and what r_responseTime and c_filesetSize contain. This being said, get is your function for dereferencing so give these a try:

raw[, get(col1)]
raw[, get(col2)]
plot(raw[, get(col1)] ~ raw[, get(col2)])
like image 158
flodel Avatar answered Nov 05 '22 05:11

flodel


If you have a vector of strings, you can use mget

cols = c("r_reponseTime", "c_filesetSize")
raw[, mget(cols)]
like image 8
tadejsv Avatar answered Nov 05 '22 04:11

tadejsv