有没有更好的方法根据ID计算列数等于某个值?

时间:2016-02-26 15:53:44

标签: r data.table

以下是我的想法:

library(data.table)    
blah.dt[ , count:= table(as.matrix(.SD))[names(table(as.matrix(.SD)))=="0"] , by =  ID]

只是想知道是否有更好或更快的方法来使用data.table执行此操作,因为我确定有

1 个答案:

答案 0 :(得分:3)

我想我得到你想要的东西:你有一个data.table,并且对于每个ID你想知道所有这些列中的零总数。

在这种情况下,我们可以做类似的事情:

dat[, count:=sum(.SD==0),by=ID]

这样做的好处是,它返回的计数为0,不存在零,而不是丢失。

(有一些虚拟数据):

set.seed(1234)
dat <- data.table(X1=sample(0:3,10,T),
                  X2=sample(0:3,10,T),
                  ID=sample(LETTERS[1:2],10,T))

dat[, count:=sum(unlist(.SD)==0),by=ID]
dat[, count2:=table(as.matrix(.SD))[names(table(as.matrix(.SD)))=="0"], by = ID, .SDcols=c("X1","X2")] # to check

dat[,table(count==count2)]
TRUE 
  10