2016-11-13 8 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 

を持っていると私は彼らの価値がdata.tableを使用して3と等しくない事実上の合計を計算したいと思います。

私は

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 byはSQLと似ています:WHERE SELECT GROUP BY。つまり、 '' data.table'をとり、 'i'を使って行を部分集合し、次に' by'でグループ化された 'j'を計算します。 – snoram

答えて

3

iで論理条件を指定できますそしてサブセット化後facto

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

また、OPのコードは、論理インデックスのsumなくvalueを取得していることにより、 '価値' のsumを取得

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

これはすべての3つのグループを省略しますが、 。 – Frank

+0

@Frankあなたは正しいです。そのような場合にOPが望んでいたことについては不明です。 – akrun