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

R语言dplyr实现条件累加和:排除当前日期所有事件的统计

R实现排除当日的历史参会次数累加

实现思路

  • 先将时间戳转换为日期维度,按「人员+日期」分组统计每个人每日的参会总次数
  • 按人员分组,计算到「上一日为止」的累计参会次数
  • 将计算得到的历史累计值匹配回原数据集的每一行即可

完整实现代码

library(dplyr)
library(lubridate) # 若不想额外加载包,可将下文as_date替换为base包的as.Date

df_result <- df %>%
  # 提取活动日期维度
  mutate(event_date = as_date(date_time)) %>%
  # 按人员+日期分组,统计每人每日参会总次数
  group_by(person, event_date) %>%
  summarise(daily_attend = sum(did_attend), .groups = "drop_last") %>%
  # 按人员分组,滞后一天计算累计参会次数,自动排除当日所有记录
  mutate(events_attended_desired = lag(cumsum(daily_attend), default = 0)) %>%
  ungroup() %>%
  # 将计算结果匹配回原数据的每一行
  right_join(df %>% mutate(event_date = as_date(date_time)), by = c("person", "event_date")) %>%
  # 调整列顺序和原数据对齐
  select(all_of(colnames(df)), events_attended_desired)

逻辑说明

该方法避开了在cumsum内嵌套条件判断的复杂逻辑,通过先聚合再匹配的方式适配每日活动数量不固定的场景:

  • 先按日期聚合后,每个人每个日期仅对应一条统计记录,此时用lag()偏移累计值就可以实现「所有当日记录都不计入」的需求
  • 运行得到的events_attended_desired列和你给出的预期结果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:05