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

如何使用dplyr在R中按分组计算两列唯一值的SUMPRODUCT(类Excel功能)

解决dplyr实现Excel SUMPRODUCT(分组唯一值乘积和)的问题

看起来你需要的是按dem_sect分组后,计算每组中area和kg_med唯一配对的乘积之和,再将这个结果映射到该组的每一行中。从你的示例数据来看,每个area对应的kg_med是唯一的,所以我们只需要先提取每组的唯一配对,再计算乘积总和即可。

解决方案代码

首先确保你已经加载了dplyr包,然后运行以下代码:

library(dplyr)

# 你的原始数据框
df <- structure(list(dem_sect = structure(c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("AB", "EP", "FE", "MF", "PA"), class = "factor"), cod_estr = c("a", "a", "b", "b", "c", "b", "b", "b", "a", "b", "c", "b", "b", "a", "b", "c", "c", "b", "c"), sect_estr = structure(c(10L, 10L, 11L, 11L, 12L, 11L, 11L, 11L, 10L, 11L, 12L, 11L, 11L, 10L, 11L, 12L, 12L, 11L, 12L), .Label = c("ABa", "ABb", "ABc", "EPa", "EPb", "EPc", "FEa", "FEb", "FEc", "MFa", "MFb", "MFc", "PAa", "PAb", "PAc"), class = "factor"), area = c(14L, 14L, 24L, 24L, 11L, 24L, 24L, 24L, 14L, 24L, 11L, 24L, 24L, 14L, 24L, 11L, 11L, 24L, 11L), kg_med = c(5.88125, 5.88125, 6.8505, 6.8505, 3.0852, 6.8505, 6.8505, 6.8505, 5.88125, 6.8505, 3.0852, 6.8505, 6.8505, 5.88125, 6.8505, 3.0852, 3.0852, 6.8505, 3.0852)), class = "data.frame", row.names = c(NA, -19L))

# 计算分组唯一值乘积和并添加新列
df <- df %>%
  group_by(dem_sect) %>%
  mutate(
    sumprod = {
      # 提取当前组中area和kg_med的唯一配对
      unique_pairs <- distinct(cur_data(), area, kg_med)
      # 计算乘积之和
      sum(unique_pairs$area * unique_pairs$kg_med)
    }
  ) %>%
  ungroup()

# 可选:将结果四舍五入到两位小数,匹配你的预期值
df <- df %>% mutate(sumprod = round(sumprod, 2))

代码解释

  • group_by(dem_sect):按dem_sect字段分组,确保每组独立计算
  • cur_data():获取当前分组的数据集,避免引用整个数据框产生的问题
  • distinct(area, kg_med):提取每组中area和kg_med的唯一组合,确保同一配对不会重复计算
  • sum(unique_pairs$area * unique_pairs$kg_med):计算这些唯一配对的乘积总和
  • mutate:将计算得到的总和作为新列sumprod添加到原数据框中,组内每一行都会获得相同的总和值
  • round(sumprod, 2):可选步骤,将结果四舍五入到两位小数,得到你预期的280.69

验证结果

运行代码后,你的sumprod列值会是280.69(四舍五入后),和Excel计算的结果一致。对于你61000行的数据集,这个方法的效率也很高,因为分组和去重操作在dplyr中都是优化过的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:44:04