首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >group by count在r中计数为零时

group by count在r中计数为零时
EN

Stack Overflow用户
提问于 2015-12-18 12:41:26
回答 3查看 918关注 0票数 4

我使用聚合函数来获取分组计数。如果count > 0,则聚合函数仅返回组的count。这就是我的东西

代码语言:javascript
复制
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")) 

应用聚合函数

代码语言:javascript
复制
my.count <- aggregate(n ~ id+group, dt, length)

现在查看结果

代码语言:javascript
复制
my.count[order(my.count$id),]

我得到了关注

代码语言:javascript
复制
id group   n
1  A     x 2
3  A     y 1
2  B     x 3

我需要以下代码(最后一行没有我需要的代码)

代码语言:javascript
复制
id group   n
1  A     x 2
3  A     y 1
2  B     x 3
4  B     y 0

感谢您的提前帮助

EN

回答 3

Stack Overflow用户

发布于 2015-12-18 12:47:46

我们可以创建另一个列'ind‘,然后使用dcastfun.aggregate从'long’重塑为'wide',并将其指定为lengthdrop=FALSE

代码语言:javascript
复制
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选项是

代码语言:javascript
复制
 as.data.frame(table(dt[-1]))
票数 5
EN

Stack Overflow用户

发布于 2015-12-18 12:47:18

您可以使用完整的"id“和”merge“列对"my.count”对象进行分组:

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2015-12-18 16:11:43

如果你只对频率感兴趣,你可以用你的公式创建一个频率表,并把它变成一个数据帧:

代码语言:javascript
复制
as.data.frame(xtabs(formula = ~ id + group, dt))

显然,这对其他聚合函数不起作用。我还在等待dplyr的摘要函数让用户决定是否保留零组。也许你可以在这里投票支持这个改进:https://github.com/hadley/dplyr/issues/341

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34348648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档