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

如何仅对重复2次的ID分组汇总DataFrame?重复超2次不汇总

解决方法

报错原因

你使用的summarize_if()第一个参数是用来筛选列的逻辑条件(比如is.numeric),而非判断分组行数的条件,n()在这里无法识别分组上下文,因此抛出错误。另外summarize_if()已被dplyr弃用,推荐使用across()替代。

方案1:仅保留行数=2的分组的汇总结果

先筛选出刚好有2行的ID分组,再对这些分组执行汇总:

library(dplyr)

df %>%
  group_by(ID) %>%
  filter(n() == 2) %>% # 只保留行数为2的分组
  summarize(across(everything(), first)) # 对所有列取第一个值完成汇总

方案2:行数=2的分组做汇总,其他分组保留原行

如果需要保留行数≠2的分组的所有原始行,同时对行数=2的分组做汇总,用group_modify()逐个处理分组:

df %>%
  group_by(ID) %>%
  group_modify(function(group_data, group_info) {
    if (nrow(group_data) == 2) {
      # 行数为2时取第一行作为汇总结果
      group_data %>% slice(1)
    } else {
      # 行数≠2时保留原行
      group_data
    }
  }) %>%
  ungroup()

补充说明

  • 如果你的汇总需求不是取first(),而是求和、均值等其他操作,直接替换first()为对应函数即可。
  • across(everything(), ...)会对所有列应用指定函数,你也可以通过across(c(col1, col2), ...)指定特定列进行汇总。

内容的提问来源于stack exchange,提问作者Maya Eldar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:43:13