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

在R中实现捐赠者首次捐赠后3个月内复捐状态判断

R实现捐赠者流失判断方案

假设你的数据框名为donations,包含Donor.ID(捐赠者ID)和Donation.Date(捐赠日期)两列,以下是完整实现代码:

# 加载所需包
library(dplyr)
library(lubridate)

# 处理数据
donations_processed <- donations %>%
  # 确保日期列是Date类型(如果原始数据不是的话)
  mutate(Donation.Date = as.Date(Donation.Date)) %>%
  # 按捐赠者分组
  group_by(Donor.ID) %>%
  # 计算每位捐赠者的首次捐赠日期
  mutate(First.Date = min(Donation.Date, na.rm = TRUE)) %>%
  # 新增Drop.Out列:判断首次捐赠后3个月内是否有其他捐赠
  mutate(Drop.Out = ifelse(
    any(Donation.Date > First.Date & Donation.Date <= First.Date %m+% months(3), na.rm = TRUE),
    1,
    0
  )) %>%
  # 取消分组(可选,根据后续需求)
  ungroup()

关键细节说明

  • 日期类型转换:必须确保Donation.Date是Date格式,否则日期计算会出错。如果原始数据是字符型,as.Date()会自动处理,若格式特殊可指定format参数(比如as.Date(Donation.Date, format = "%Y/%m/%d"))。
  • 首次捐赠日期计算:用min(Donation.Date, na.rm = TRUE)取每组最小日期,na.rm = TRUE是为了忽略可能存在的缺失日期。
  • 3个月窗口判断:使用lubridate的%m+% months(3)来准确计算“3个月后”的日期,避免普通日期加法遇到月末的错误(比如1月31日加3个月,普通加法会得到不存在的4月31日,而%m+%会自动转为4月30日)。
  • Drop.Out逻辑:any()函数检查组内是否存在满足条件的记录——捐赠日期晚于首次捐赠,且在首次捐赠后3个月内。只要有一条满足,就返回1,否则0。na.rm = TRUE确保忽略缺失值对判断的影响。

如果你的数据列名不同,只需替换代码中对应的列名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:15:37