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

基于可变日期在R中统计响应值的技术实现问题

解决方法:用dplyr分组后做累计求和

嘿,我懂你的需求了——你需要按CustomerID和AccountID分组,对每个OpenDate统计该日期及之前所有Response=1的累计数量(从你的样本和期望结果能看出来是累计1的个数)。之前用summarise没达到预期,是因为summarise是做分组聚合(每个组只返回一行),而你要的是每个组内每一行都对应一个累计值,这时候得用mutate配合cumsum来实现。

具体步骤和代码

假设你的数据框名叫df,直接用这段代码就能得到你要的结果:

library(dplyr)

df_result <- df %>%
  # 按客户和账户分组,保证每组独立计算
  group_by(CustomerID, AccountID) %>%
  # 先按日期排序,确保累计顺序正确(如果数据已经按日期排好可以省略,但加上更稳妥)
  arrange(OpenDate) %>%
  # 用cumsum计算累计的Response=1的数量——因为Response只有0和1,累加正好是累计计数
  mutate(Count = cumsum(Response)) %>%
  # 可选:取消分组,方便后续操作
  ungroup()

验证结果

把你的样本数据代入后,输出结果和你期望的完全一致:

CustomerID AccountID OpenDate Response Count
AAA 456 2020-01-01 1 1
AAA 456 2020-01-03 1 2
AAA 456 2020-01-05 1 3
BBB 789 2020-02-01 1 1
BBB 789 2020-02-22 0 1
BBB 789 2020-03-01 1 2

为啥之前用summarise不行?

简单说,summarise是把每个组的数据聚合为一行结果,而你需要的是保留每个组内的所有行,同时给每行加上到当前日期的累计值——这种逐行的转换操作,mutate才是正确的选择,cumsum则专门用来做累计求和,完美匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:47:51