2016-12-12 2 views
1

Я хотел бы подмножить таблицу данных на основе столбца, который я создал в аргументе j. Я предполагаю, что это невозможно, учитывая, что я получаю «Ошибка в eval (expr, envir, enc): объект« suma »не найден» (пример ниже), но, возможно, есть способ обойти его. Какие-либо предложения?data.table подмножество столбцом, определенным в J

спасибо,

test <- data.table(A = c('a','b','c'), B = rep(c(1,2,3),4), C = c('typ1','typ2')) 

head(test) 
    A B C 
1: a 1 typ1 
2: b 2 typ2 
3: c 3 typ1 
4: a 1 typ2 
5: b 2 typ1 
6: c 3 typ2 

test[ suma > 4 , .(suma = sum(B)) , by = .(A,C)] 

Error in eval(expr, envir, enclos) : object 'suma' not found 
+2

Для дальнейшего использования, 'DT [I, J, по]' 'фильтры по i', а затем с помощью группы' by' перед тем вычисляя 'j', поэтому вы не можете сделать это по-своему. См. Страницу «Начало работы» на веб-сайте для некоторых учебных пособий http://r-datatable.com – Frank

+0

Для справки, дубликат http://stackoverflow.com/questions/36292702/data-table-dti-j -by-do-not-select-groups-using-criteria-in-i (не может отмечать как обман, потому что он еще не ответил, в зависимости от FR https://github.com/Rdatatable/data.table/ проблемы/788). – Frank

ответ

3

Обойти это сделать фильтрацию после создания столбца в отдельной операции. В data.table это может быть прикован к концу предыдущей операции, используя [

test[ , .(suma = sum(B)) , by = .(A,C)][suma > 4] 
# A C suma 
# 1: c typ1 6 
# 2: c typ2 6 
Смежные вопросы