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

R语言按条件聚合行并保留非分组id1列的实现方案

实现方案

你可以在原有dplyr语法的基础上调整分组后的过滤逻辑,直接兼容你现有的代码风格:

library(dplyr)

df <- df %>%
  group_by(id2) %>%
  # 仅对id2为a的组保留前2行,其余组保留全部行
  filter(if (first(id2) == "a") row_number() <= 2 else TRUE) %>%
  summarise(
    id1 = first(id1), # 取组内第一个id1值,和你期望的输出一致
    across(starts_with("n"), sum, na.rm = TRUE),
    .groups = "drop"
  )

运行后输出结果完全匹配你的需求:

id1   id2      n1    n2    n3    n4
  <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 a     a         4     3     1     1
2 c     d         0     1     1     1

补充说明

  • 把filter替换为slice(if (first(id2) == "a") 1:2 else everything())可以实现完全相同的效果
  • 用starts_with("n")匹配所有n开头的列,不需要手动枚举所有n列,后续新增n前缀列时无需修改代码
  • 如果id2为a的组实际行数不足2行,代码会自动按实际存在的行数聚合,无需额外兼容处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:36:03