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

在R中计算自最近随访或基线起的天数(含多重复实例数据集)

解决方案

首先注意原始数据里的visit_date包含字符串"NA",需要先转换为日期类型并处理缺失值,否则无法进行日期计算。以下是完整的处理流程:

1. 数据预处理

先将visit_date转换为Date类型,把字符串"NA"替换为真实的缺失值:

library(dplyr)

# 原始数据
data <- data.frame(
  record_id = c(1,1,1,2,3,4,4,5,6,7,8,8,9,10,10,10),
  visit_date = c("2020-09-24", "2020-12-05", "2021-03-01", "2021-10-03", "2021-10-01", "2021-10-05", "NA", "2021-08-25", "2021-09-19", "2021-10-01", "2021-09-27", "2021-09-07", 
"2021-10-03", "2021-10-08", "2022-03-22", "2022-07-12"),
  repeat_instance = c(0,1,2,0,0,0,1,0,0,0,0,1,0,0,1,2),
  Time_Since_Appointment = c("NA", "72d 1H 0M 0S", "86d 0H 0M 0S", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "1076d 0H 0M 0S", "NA", "NA", "165d 0H 0M 0S", "112d 0H 0M 0S")
)

# 预处理:转换日期类型,处理字符串NA
data_clean <- data %>%
  mutate(visit_date = as.Date(visit_date, na.strings = "NA"))

2. 生成目标时间差变量

按record_id分组,判断每个组是否存在repeat_instance>0的记录,选择对应的日期计算与今日的时间差:

result <- data_clean %>%
  group_by(record_id) %>%
  mutate(
    # 标记当前组是否有重复实例
    has_repeat = any(repeat_instance > 0, na.rm = TRUE),
    # 选择用于计算的日期:有重复则取最新的visit_date,否则取基线日期(repeat_instance=0)
    target_date = ifelse(has_repeat, 
                         max(visit_date, na.rm = TRUE),
                         visit_date[repeat_instance == 0]),
    # 转换为Date类型(ifelse会返回数值,需转回日期格式)
    target_date = as.Date(target_date, origin = "1970-01-01"),
    # 计算距今日的天数
    days_since_today = as.numeric(Sys.Date() - target_date),
    # 计算距今日的周数(保留两位小数)
    weeks_since_today = round(days_since_today / 7, 2)
  ) %>%
  ungroup()

关键说明

  • has_repeat:用any(repeat_instance > 0)判断当前患者是否有随访记录
  • target_date:
    • 有随访记录时,取该患者所有非缺失的visit_date中的最大值(最新随访日期)
    • 无随访记录时,取该患者repeat_instance=0对应的基线日期
  • 时间差计算:Sys.Date()获取当前系统日期,用as.numeric()将日期差转换为数值型天数,再除以7得到周数

可通过以下代码查看处理后的关键列:

select(result, record_id, visit_date, repeat_instance, target_date, days_since_today, weeks_since_today)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:25:20