以下是我的想法:
library(data.table)
blah.dt[ , count:= table(as.matrix(.SD))[names(table(as.matrix(.SD)))=="0"] , by = ID]
只是想知道是否有更好或更快的方法来使用data.table执行此操作,因为我确定有
答案 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