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

如何在dplyr的summarize()中按ID去重计算聚合统计?

用dplyr实现a列求和+按ID去重计算b列均值

需求说明

  • 对数据框的a列计算所有行的总和
  • 对b列计算均值:同一ID对应的b值仅取一次参与计算;不同ID的b值即使数值重复,也全部纳入均值计算

示例数据

library(dplyr)

# 示例1
data1 <- tibble(ID=c("111", "111", "222", "333"), 
                a=c(3,4,5,6), 
                b=c(7,7,8,9))

# 示例2
data2 <- tibble(ID=c("111", "111", "222", "333", "444"), 
                a=c(3,4,5,6,7), 
                b=c(7,7,8,9,7))

解决方案代码

直接在summarize()中完成两个计算:

# 处理示例1
result1 <- data1 %>%
  summarize(
    sum_a = sum(a),  # 计算a列所有值的总和
    mean_b = mean(b[!duplicated(ID)])  # 按ID去重后取对应b值,再求均值
  )

# 输出结果
result1
#> # A tibble: 1 × 2
#>   sum_a mean_b
#>   <dbl>  <dbl>
#> 1    18      8

# 处理示例2
result2 <- data2 %>%
  summarize(
    sum_a = sum(a),
    mean_b = mean(b[!duplicated(ID)])
  )

# 输出结果
result2
#> # A tibble: 1 × 2
#>   sum_a mean_b
#>   <dbl>  <dbl>
#> 1    25   7.75

逻辑说明

  • sum(a):直接对a列所有行的值求和,完全符合需求;
  • b[!duplicated(ID)]:通过!duplicated(ID)筛选出每个ID的首次出现行,提取这些行的b值——既实现了同一ID的b值只取一次,又保留了不同ID间重复的b值,最后用mean()计算均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:18:13