2016-11-13 7 views
1

Я хочу суммировать каждую группу с условием. У меня есть следующие данныеСумма на группу с условием в data.table

a<-data.table (facto=c ("a","b","a","a","b","b","b"), value = c (2,3,2,3,2,2,2)) 

    facto value 
1:  a  2 
2:  b  3 
3:  a  2 
4:  a  3 
5:  b  2 
6:  b  2 
7:  b  2 

, и я хотел бы вычислить сумму фактического которой их значение не равно 3, используя data.table.

Я использовал этот код

output <-a[, (value=sum(value!=3)), .(facto)] 

, и это дает мне следующую информацию, которая подсчитывает строки, которые не равны 3 для каждой группы:

facto V1 
1:  a 2 
2:  b 3 

Однако, я хотел бы иметь следующие данные:

 facto V1 
    1:  a 4 
    2:  b 6 
+0

'DT [I, J, по] '. i j аналогичен SQL: WHERE SELECT GROUP BY. В словах: «Возьмите' data.table', подмножества строк, используя 'i', а затем вычислите' j', сгруппированные по 'by'" – snoram

ответ

3

Мы можем указать логическое условие в i и получить sum о 'ценности' по facto

a[value!=3, sum(value), by = facto] 
# facto V1 
#1:  a 4 
#2:  b 6 

Кроме того, код OP является получение sum логического индекса, а не value после Подменю

a[, (value=sum(value[value!=3])), .(facto)] 
+0

Это опустит любые группы, все три, но я думаю, должен иметь нуль в таких случаях , – Frank

+0

@Frank Вы правы. Не уверен в том, чего хочет OP в этом случае. – akrun

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