2015-02-10 6 views
1

Я хотел бы использовать переменную, чтобы указать имя столбца при работе на нем.Использование переменной для указания имени столбца в `data.table`

Чтобы привести пример, у меня может быть таблица данных. Set1, в которой я хочу изменить класс столбца x на числовой. Я мог бы сделать

Set1New=transform(Set1,x=as.numeric(x)) 

Это будет работать, но теперь я не хочу, чтобы жестко закодировать имя столбца, а использовать переменную, позволяет называть его Y (который ранее был определен как Y="x".

Как узнать R использовать содержимое переменной вместо того, чтобы искать колонку Y, когда я использую

Set1New=transform(Set1,Y=as.numeric(Y)) 

Я знаю, что, например, setkey и setkeyv существуют, где setkeyv решает эту проблему. Есть ли аналогичное решение для преобразования? Или, что я хотел бы получить лучше, существует ли общее решение использовать содержимое переменной вместо имени переменной?

+0

Если это data.table, то 'Set1 [х: = as.numeric (x)] ' – akrun

+2

Вероятно, вы ищете' Set1 [, (Y): = as.numeric (get (Y))] '. В общем случае, если вы уже используете 'data.table', операция, такая как' Set1New = transform (.. 'берет всю точку ее использования в первую очередь. Вы должны прочитать документацию' data.table' о NSE и присваивании по ссылке. Более конкретно посмотрите [здесь] (http://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdf) и [здесь] (https://github.com /Rdatatable/data.table/tree/master/vignettes) –

+0

Или вы можете использовать 'eval'' Set1 [, (Y): = as.numeric (eval (as.name (Y)))] – akrun

ответ

2

данных:

library(data.table) 
dt = data.table(col1=letters[1:2], x=c('1','2')) 

Одним из решений является использование quote и eval в вашем data.table:

y = quote(x) 
dt[,eval(y):=as.numeric(eval(y))] 

#> is.numeric(dt$x) 
#[1] TRUE 
+0

Ошибка в eval (expr, envir, enc): объект 'x' не найден – user3673