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

如何计算tibble中变量X的连续累积和?

计算布尔变量的连续累积和

原始数据构造

library(tibble)
dt <- tibble(id = rep(1,8),
             year = 2001:2008,
             X = c(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE,TRUE,TRUE))

解决方案代码

使用dplyr包可高效实现需求,核心思路是先划分连续状态的区块,再在每个区块内计算累积和:

library(dplyr)

dt_result <- dt %>%
  # 生成连续状态的分组标识:每遇到FALSE,分组号递增
  mutate(group = cumsum(!X)) %>%
  # 按分组计算组内累积和
  group_by(group) %>%
  mutate(cumN = cumsum(X)) %>%
  ungroup() %>%
  # 移除临时分组列
  select(-group)

# 查看结果
dt_result

运行结果

# A tibble: 8 × 4
     id  year X     cumN
  <dbl> <int> <lgl> <int>
1     1  2001 FALSE     0
2     1  2002 TRUE      1
3     1  2003 TRUE      2
4     1  2004 FALSE     0
5     1  2005 FALSE     0
6     1  2006 TRUE      1
7     1  2007 TRUE      2
8     1  2008 TRUE      3

代码解释

  • cumsum(!X):将X取反后累积求和,每遇到一个FALSE,分组号就加1,这样连续的TRUE或FALSE会被归为同一组,实现"连续区块"的划分。
  • 按group分组后用cumsum(X)计算累积和:TRUE对应数值1,组内累积会从1开始递增;FALSE对应数值0,组内累积始终为0,完全匹配需求。

多ID场景适配

如果数据包含多个id,需要保证每个id独立计算,只需在分组时加入id:

dt_result <- dt %>%
  group_by(id) %>%
  mutate(group = cumsum(!X)) %>%
  group_by(id, group) %>%
  mutate(cumN = cumsum(X)) %>%
  ungroup() %>%
  select(-group)

内容的提问来源于stack exchange,提问作者X.Jun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:25:24