2016-11-03 7 views
-1

Я хотел бы передать переменную (содержащую имя столбца в виде строки) в качестве аргумента в data.table. Как мне это сделать?Как передать имя столбца переменной в data.table в R?

Рассмотрим data.table ниже:

myvariable <- "a" 
myvariable_2 <- "b" 

DT = data.table(ID = c("b","b","b","a","a","c"), a = 1:6, b = 7:12, c = 13:18) 
DT 
# ID a b c 
# 1: b 1 7 13 
# 2: b 2 8 14 
# 3: b 3 9 15 
# 4: a 4 10 16 
# 5: a 5 11 17 
# 6: c 6 12 18 
  1. я могу использовать subset извлечь столбцы, то есть: subset(DT, TRUE, myvariable), но это просто выводит столбец/s
  2. Как использовать subset для извлечения на основе столбца по некоторым критериям? например: extract myvariable column when myvariable_2 < 10
  3. Как извлечь сводную статистику по группам, передав имена столбцов в качестве переменных?
  4. Как построить описательные графики, используя data.table, передав имена столбцов в качестве переменных?

Я знаю, что это может быть проще в data.frame т. Е. Передавая переменные как имена столбцов. Но я везде читал, что data.table быстрее/эффективно, поэтому он хотел бы придерживаться его.

Имеет ли переключение между data.table и data.frame огромные последствия для работы с памятью/производительностью?

Я не хочу явно указывать имена столбцов, так как я хочу, чтобы этот фрагмент кода был повторно использован.

+0

Я предлагаю вам чтения через https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-faq.html в качестве отправной точки. – thelatemail

+0

В версии devel вы можете сделать это, как и в data.frame. Когда будет выпущена стабильная версия (1.9.8), вам больше не понадобится 'with = FALSE' –

ответ

3

комментарий от @thelatemail - очень хорошее начало. Сначала прочитайте это! Другой быстрый способ ниже

library(data.table) 
df = data.table(a=1:10, b=letters[1:2], c=11:20) 

var1="a" 
var2="b" 

dt1=df[,c(var1,var2), with=F] 

Подумайте «с = F» как сделать «J» часть data.table ведут себя как у data.frame

Edit 1: для подмножества в состоянии в пределах DataTable

df[get(var1) > 5, c(var1, var2),with = F] 
+0

Это« Подумайте о »с = F», так как заставить data.table вести себя как data.frame «приведет к неправильной интуиции». – djhurio

+0

@djhurio не могли бы вы подробнее рассказать? Я также изучаю здесь и хочу узнать о цели/роли «with =». Благодаря! –

+1

Из справки 'data.table':« По умолчанию с = TRUE и j оценивается внутри фрейма x; имена столбцов могут использоваться как переменные. Когда with = FALSE j является символьным вектором имен столбцов или числовым вектором позиции столбцов для выбора, а возвращаемое значение всегда является таблицей данных. " – djhurio

Смежные вопросы