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

在R语言中计算事件间隔天数并标记最近接受记录

问题需求

针对给定数据表,需完成两项操作:

  • 用布尔值mostRecent == TRUE/FALSE标记每条记录是否为该用户最近一次“Accepted”状态的记录
  • 计算该用户最近一次“Accepted”记录日期至当前日期的天数

示例数据表

user  status_name invitationDate
  <fct> <fct>       <date>        
1 1     Accepted    2021-09-09    
2 1     Declined    2021-09-10    
3 1     Accepted    2021-09-30    
4 4     Accepted    2021-11-10    
5 1     Accepted    2021-11-22    
6 4     Declined    2021-11-29    

数据表重建代码(R)

df <- tribble(
  ~user, ~status_name, ~invitationDate,
  "1", "Declined", "2021-07-13",
  "4", "Declined", "2021-07-31",
  "1", "Accepted", "2021-09-09",
  "1", "Declined", "2021-09-10",
  "1", "Accepted", "2021-09-30",
  "4", "Accepted", "2021-11-10",
  "3", "Declined", "2021-11-12",
  "2", "Declined", "2021-11-18",
  "1", "Accepted", "2021-11-22",
  "4", "Declined", "2021-11-29"
) %>%
  mutate(
    user = as.factor(user),
    status_name = as.factor(status_name),
    invitationDate = as.Date(invitationDate, format = "%Y-%m-%d")
  ) %>%
  group_by(user) %>%
  mutate(cumsum = cumsum(status_name == "Accepted")) %>%
  filter(cumsum > 0) %>%
  select(-cumsum)

实现代码

使用dplyr分组处理,完成需求:

library(dplyr)

result_df <- df %>%
  group_by(user) %>%
  mutate(
    # 获取当前用户最近一次Accepted的日期
    max_accepted_date = max(invitationDate[status_name == "Accepted"], na.rm = TRUE),
    # 标记是否为最近一次Accepted记录
    mostRecent = status_name == "Accepted" & invitationDate == max_accepted_date,
    # 计算最近一次Accepted到当前日期的天数
    days_since_last_accepted = as.integer(Sys.Date() - max_accepted_date)
  ) %>%
  ungroup()

结果说明

  • mostRecent:仅该用户最近一次的“Accepted”记录值为TRUE,其余均为FALSE
  • days_since_last_accepted:每个用户的所有记录均显示其最近一次“Accepted”日期到当前系统日期的间隔天数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:27:43