2015-06-26 9 views
1

Я использую пакет data.table в R, чтобы суммировать данные часто. В этом конкретном случае я просто подсчитываю количество вхождений в наборе данных для данных групп столбцов. Но у меня возникли проблемы с включением цикла, чтобы сделать это динамически.Как передать имя переменной столбца команде «by»?

Как правило, я бы обобщил данные следующим образом.

data <- data.table(mpg) 
data.temp1 <- data[, .N, by="manufacturer,class"] 
data.temp2 <- data[, .N, by="manufacturer,trans"] 

Но теперь я хочу пройти через интересующие столбцы в моем наборе данных и сюжете. Вместо того, чтобы повторять код снова и снова, я хочу поместить его в цикл for. Что-то вроде этого:

columns <- c('class', 'trans') 

for (i in 1:length(columns)) { 
    data.temp <- data[, .N, by=list(manufacturer,columns[i])] 
    #plot data 
} 

Если бы я хотел только столбец интереса, я мог бы сделать это в цикле, и она работает:

data.temp <- data[, .N, by=get(columns[i])] 

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

Поблагодарили бы за любые мысли!

ответ

5

Вы должны быть хорошо, если вы просто цитата `«производитель»

data.temp <- data[, .N, by=c("manufacturer",columns[i])] 

На странице ?'[.data.table' помощи, by= может быть

Один неупомянуто именем столбца, список() выражений имен столбцов, одну символьную строку, содержащую имена столбцов, разделенных запятыми (где пробелы значительны, поскольку имена столбцов могут содержать пробелы даже в начале или в конце) или символьный вектор с именами столбцов.

Это похоже на самый простой способ дать вам то, что вам нужно.

+0

Вы совершенно правы! Не знаю, как я это пропустил. Я думал, что я это пробовал. Благодаря! – AlexP

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