【发布时间】:2017-04-28 05:02:31
【问题描述】:
想象一下,我有一个 data.frame(或矩阵),其中包含几个不同的值,例如这个
test <- data.frame(replicate(10,sample(c(-1,0,1),20, replace=T, prob=c(0.2,0.2,0.6))))
test2 <- test
如果我想添加带有计数的额外列,我可以这样做:
test2$good <- apply(test,1, function(x) sum(x==1))
test2$bad <- apply(test,1, function(x) sum(x==-1))
test2$neutral <- apply(test,1, function(x) sum(x==0))
但如果我有许多可能的值,我将不得不创建许多行,这不会很优雅。
我用table()试过了,但是输出不好用
apply(test,1, function(x) table(x))
还有一个大问题,如果任何一行不包含某个因素的任何出现,table() 生成的结果长度不一样,无法绑定。
有没有办法强制 table() 考虑该值,告诉它发生率为零?
然后我考虑过使用 do.call 或 lapply 并合并,但这对我来说太难了。
我也读过 dplyr 计数,但我不知道如何去做。 谁能提供 dplyr 或 tidyr 的解决方案?
PD:data.table 解决方案怎么样?
【问题讨论】:
-
当然有更好的方法,但也许
sapply(-1:1,function(y){apply(test,1, function(x) sum(x==y))})可以帮助你