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

R语言:如何按条件计算列总和(包含条件变更的行)

基于条件列计算分段求和(包含条件触发行)

针对你提供的数据框,我们可以用dplyr包实现需求:仅在x=1的行计算从上次x=1之后(含当前行)的y列总和,其他行留空。

解决方案代码

library(dplyr)

Test = structure(list(x = c(0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1),
               y = c(3, 4, 5, 6, 2, 4, 8, 9, 11, 57, 14, 21, 1)), row.names = c(NA,
                                                                                -13L), class = c("tbl_df", "tbl", "data.frame"))

Test %>%
  # 生成分组标识:将每次x=1之前的行归为同一组
  mutate(group = lag(cumsum(x == 1), default = 0)) %>%
  group_by(group) %>%
  # 仅在x=1的行计算该组y的总和,其他行设为NA
  mutate(sum_y = ifelse(x == 1, sum(y), NA)) %>%
  ungroup() %>%
  # 移除临时分组列
  select(-group)

代码逻辑说明

  1. 分组标识生成:lag(cumsum(x == 1), default = 0)会生成递增的分组ID,每次遇到x=1时,后续行将进入新分组,确保每个分组包含从上次x=1之后到当前x=1的所有行。
  2. 分组求和:按分组ID聚合后,仅在x=1的行计算该组y的总和,其他行保留NA,匹配你需要的结果格式。

输出结果预览

最终数据框会新增sum_y列,仅在x=1的行显示对应分段的求和值:

xysum_y
03NA
04NA
05NA
06NA
02NA
1424
08NA
09NA
11128
15757
014NA
021NA
1136

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:01:27