Pass column name in data.table using variable

Rdata.table

R Problem Overview


> Possible Duplicate:
> Variably selecting/assigning to fields in a data.table

In following example, I am creating a data table having column name ‘x’ and ‘v’

library('data.table')
DT <- data.table(x = c("b","b","b","a","a"), v = rnorm(5))

I can access values of column ‘x’ by :

DT[ , x]
# [1] "b" "b" "b" "a" "a"

But if I want to access by passing through a variable, it doesn’t work

temp <- "x"
DT[ , temp]
# [1] "x"

There would be multiple columns and I will have to select values for only couple of them. These column names I will be provide by passing through a R module.

Never mind, I got it, it should be:

DT[ , get(temp)]

R Solutions


Solution 1 - R

Use the quote() and eval() functions to pass a variable to j. You don't need double-quotes on the column names when you do it this way, because the quote()-ed string will be evaluated inside the DT[]

temp <- quote(x)
DT[ , eval(temp)]
# [1] "b" "b" "b" "a" "a"

With a single column name, the result is a vector. If you want a data.table result, or several columns, use list form

temp <- quote(list(x, v))
DT[ , eval(temp)]
#   x           v
# 1: b  1.52566586
# 2: b  0.66057253
# 3: b -1.29654641
# 4: a -1.71998260
# 5: a  0.03159933

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1631306View Question on Stackoverflow
Solution 1 - RDouglas ClarkView Answer on Stackoverflow