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

在R语言中如何按分组并带条件对行求和

解决R语言按分组带条件求和的问题

首先,先还原你的示例数据:

df1 <- data.frame(
  id = c(1,1,2,3,4,4),
  window = c(10,230,430,10,370,380),
  count1 = c(2,53,40,3,32,14),
  count2 = c(30,3,5,94,4,3)
)

你之前用mutate的思路问题在于:它只会给每行新增列,不会合并行,但你的需求是要把同ID下所有window≠10的行合并成一行并求和,因此需要用分组聚合+分情况处理再合并的方式实现:

library(dplyr)

result_df1 <- df1 %>%
  # 分两组处理后合并
  bind_rows(
    # 第一组:直接保留所有window=10的行
    filter(., window == 10),
    # 第二组:对window≠10的行按ID聚合
    filter(., window != 10) %>%
      group_by(id) %>%
      summarise(
        window = min(window),  # 取组内最小的window,要取第一个出现的就换成first(window)
        count1 = sum(count1),
        count2 = sum(count2),
        .groups = "drop"
      )
  ) %>%
  # 按ID排序让结果更规整
  arrange(id)

运行后得到的结果完全符合你的预期:

id window count1 count2
1  1     10      2     30
2  1    230     53      3
3  2    430     40      5
4  3     10      3     94
5  4    370     46      7

逻辑说明

  • 先把数据拆成两类:window=10的行直接保留,不需要聚合;window≠10的行按ID分组,用summarise求和计数、提取目标window值;
  • 最后用bind_rows把两部分结果合并,再排序得到最终输出。

内容的提问来源于stack exchange,提问作者Yuto Best boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:26:11