如何在R语言中使用dplyr包实现SUMPRODUCT功能
用dplyr实现SUMPRODUCT功能
嘿,这事儿不难,我帮你用dplyr搞定类似Excel里SUMPRODUCT的功能!先明确一下:SUMPRODUCT核心就是把两列对应位置的元素相乘,再把所有乘积加总对吧?结合你的数据集,我给你分情况说明:
1. 基础场景:对应元素相乘后直接求和
这是最贴近Excel SUMPRODUCT的用法,直接对A、B两列的每一行元素相乘,再求和。
首先得确保你加载了dplyr包:
library(dplyr)
先把你的数据集构造出来(方便直接运行测试):
# 构造你的数据集 df <- tibble( A = c(1122513454, 1122513460, 1600041729, 2100002632, 2840007103, 2840064133, 3190300079, 3190301011, 3680024411, 4000000263, 4100002263, 4880004352, 4880015611, 4900007044, 7084781116, 7124925306, 7225002523, 23012600000, 80880593057, 98880000045), B = c(0, 0, 0, 147905, 0, 138142, 138040, 138120, 0, 4000000263, 4100002268, 138159, 138159, 0, 142967, 0, 7225001325, 0, 0, 0) )
然后用两种方式实现:
方式一:先新增乘积列再求和
这种方式更直观,适合需要查看中间结果的场景:
df %>% # 新增每行的乘积列 mutate(row_product = A * B) %>% # 对乘积列求和,na.rm=TRUE避免NA值干扰计算 summarize(total_sumproduct = sum(row_product, na.rm = TRUE))
方式二:直接在summarize中计算(更简洁)
如果不需要保留中间列,直接一步到位:
df %>% summarize(total_sumproduct = sum(A * B, na.rm = TRUE))
2. 处理重复值场景:先聚合再计算
你提到数据集包含重复值,比如B列有两个138159对应的不同A值。如果你的需求是对相同B值的A先求和,再和B相乘后加总,可以先分组聚合:
df %>% # 按B列分组 group_by(B) %>% # 每组内的A值求和 summarize(group_A_sum = sum(A)) %>% # 计算每组的乘积并最终求和 summarize(total_sumproduct = sum(group_A_sum * B))
这样就会先把相同B值的A合并,再完成SUMPRODUCT的计算啦~
内容的提问来源于stack exchange,提问作者Sayan analytics
相关产品推荐
相关产品推荐

