在r中计数为零时按计数分组

sea*_*eak 3 aggregate r

我使用聚合函数来按组计数.如果count> 0,则聚合函数仅返回组的计数.这就是我所拥有的

dt <- data.frame(
n  = c(1,2,3,4,5,6),
id = c('A','A','A','B','B','B'),
group = c("x","x","y","x","x","x")) 
Run Code Online (Sandbox Code Playgroud)

应用聚合函数

my.count <- aggregate(n ~ id+group, dt, length)
Run Code Online (Sandbox Code Playgroud)

现在看到结果

my.count[order(my.count$id),]
Run Code Online (Sandbox Code Playgroud)

我得到了关注

id group   n
1  A     x 2
3  A     y 1
2  B     x 3
Run Code Online (Sandbox Code Playgroud)

我需要以下内容(最后一行为零,我需要)

id group   n
1  A     x 2
3  A     y 1
2  B     x 3
4  B     y 0
Run Code Online (Sandbox Code Playgroud)

谢谢你提前帮忙

akr*_*run 5

我们可以创建另一个列'ind'然后用于dcast从'long'重新整形为'wide',指定fun.aggregateas lengthdrop=FALSE.

library(reshape2)
dcast(transform(dt, ind='n'), id+group~ind,
           value.var='n', length, drop=FALSE)
#  id group n
#1  A     x 2
#2  A     y 1
#3  B     x 3
#4  B     y 0
Run Code Online (Sandbox Code Playgroud)

或者是一个base R选项

 as.data.frame(table(dt[-1]))
Run Code Online (Sandbox Code Playgroud)