我使用聚合函数来获取分组计数。如果count > 0,则聚合函数仅返回组的count。这就是我的东西
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")) 应用聚合函数
my.count <- aggregate(n ~ id+group, dt, length)现在查看结果
my.count[order(my.count$id),]我得到了关注
id group n
1 A x 2
3 A y 1
2 B x 3我需要以下代码(最后一行没有我需要的代码)
id group n
1 A x 2
3 A y 1
2 B x 3
4 B y 0感谢您的提前帮助
发布于 2015-12-18 12:47:46
我们可以创建另一个列'ind‘,然后使用dcast将fun.aggregate从'long’重塑为'wide',并将其指定为length和drop=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或者base R选项是
as.data.frame(table(dt[-1]))发布于 2015-12-18 12:47:18
您可以使用完整的"id“和”merge“列对"my.count”对象进行分组:
merge(my.count, expand.grid(lapply(dt[c("id", "group")], unique)), all = TRUE)
## id group n
## 1 A x 2
## 2 A y 1
## 3 B x 3
## 4 B y NA上有几个问题,向您展示了如果需要的话,如何用0替换NA。
发布于 2015-12-18 16:11:43
如果你只对频率感兴趣,你可以用你的公式创建一个频率表,并把它变成一个数据帧:
as.data.frame(xtabs(formula = ~ id + group, dt))显然,这对其他聚合函数不起作用。我还在等待dplyr的摘要函数让用户决定是否保留零组。也许你可以在这里投票支持这个改进:https://github.com/hadley/dplyr/issues/341
https://stackoverflow.com/questions/34348648
复制相似问题