You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr按C1值统计对应分组信息的问题

使用dplyr按C1值统计对应分组信息的问题

看起来你想要针对每个C1的取值,统计对应的分组(grp)数量、最长分组的行数,以及分组行数的平均值对吧?之前的代码里Grps列出错是因为用了cur_group_id()——这个函数是给全局的分组分配ID,不是统计每个C1下的分组数量,咱们来修正一下。

先看你的测试数据:

library(dplyr)
DF<-data.frame(ID=c(seq(1,14, by = 1)),
               C1=c(1,0,1,1,1,0,0,3,3,3,0,0,0,0) ,
               grp = c(1,2,3,3,3,4,4,5,5,5,6,6,6,6)
)

正确的处理逻辑是:先按C1和grp分组统计每个子组的行数,再针对每个C1汇总需要的指标。对应的代码如下:

DF %>%
  group_by(C1, grp) %>%
  summarize(N = n(), .groups = "drop_last") %>%  # 保留C1的分组层级,方便后续汇总
  summarize(
    Grps = n(),          # 统计当前C1下的grp数量
    longest = max(N),    # 找出当前C1下最长分组的行数
    Mean = mean(N)       # 计算当前C1下分组行数的平均值
  )

运行后就能得到你想要的结果:

# A tibble: 3 × 4
     C1  Grps longest  Mean
  <dbl> <int>   <int> <dbl>
1     0     3       4  2.33
2     1     2       3  2   
3     3     1       3  3   

简单解释下关键步骤:

  • 第一步group_by(C1, grp)后,每个(C1,grp)组合是一个独立子组,summarize(N = n())得到每个子组的行数
  • .groups = "drop_last"参数用来移除最内层的grp分组,只保留C1的分组层级,这样后续的汇总操作就会针对每个C1单独计算
  • 第二个summarize里,n()直接统计当前C1下有多少个不同的grp,也就是你需要的Grps值;剩下的max(N)和mean(N)就对应最长分组行数和平均行数了

备注:内容来源于stack exchange,提问作者GrBa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:13:00