R语言使用tidyverse按多列条件对S列求和并输出数据框
R语言按指定条件列对目标列求和(tidyverse实现)
需求说明
需要对给定数据集,按指定的条件列,分别统计条件列取值为1时对应的S列数值总和:
- 指定条件列存储为变量:
condition_columns = c('A', 'B') - 输出要求:返回两列结构的数据框,第一列为条件列名称,第二列为对应S列的求和结果,示例中A列取1时S总和为490,B列取1时S总和为250。
实现代码
首先加载tidyverse套件,核心用dplyr做数据处理、tidyr做长宽表转换:
library(tidyverse) # --------------- 核心计算逻辑 --------------- # 替换下面的df为你自己读入的数据集变量名即可 sum_result <- df %>% # 提取需要用到的条件列、待求和的S列 select(all_of(condition_columns), S) %>% # 将多个条件列从宽格式转为长格式,方便统一分组计算 pivot_longer( cols = all_of(condition_columns), names_to = "condition_col", values_to = "flag" ) %>% # 仅保留条件列取值为1的行 filter(flag == 1) %>% # 按条件列名称分组 group_by(condition_col) %>% # 分组求和得到结果 summarise(S_sum = sum(S))
结果说明
运行代码后得到的sum_result和期望输出结构完全一致:
condition_col列依次显示条件列名A、BS_sum列对应显示每个条件列取1时的S列总和,即A对应490,B对应250
如果你的条件判断规则不是「取值等于1」,只需要修改filter()里的判断逻辑即可适配其他场景。
内容的提问来源于stack exchange,提问作者Philip
相关产品推荐
相关产品推荐

