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

R语言基于基准日期计算天数并生成Dref列的实现方法

解决方法

先加载所需的tidyverse包(包含dplyr用于数据处理,lubridate用于日期操作),然后按以下步骤处理数据:

library(tidyverse)

# 原数据
df <- tibble::tribble(
  ~SUBJID, ~ARM, ~TIMEPOINT,     ~TP.DATE,     ~TPR_ar,     ~TPR_ir,
  1,  "A",      "BL0", "2020-05-13", "Undefined", "Undefined",
  1,  "A",      "FU1", "2020-08-04",        "SD",        "SD",
  1,  "A",      "FU2", "2020-10-06",        "PR",        "PR",
  1,  "A",      "FU3", "2020-12-10",        "PR",        "PR",
)

# 数据处理
df_processed <- df %>%
  # 转换日期格式为可计算的日期对象
  mutate(TP.DATE = ymd(TP.DATE)) %>%
  # 按受试者和组别分组,确保每组用自身BL0日期做基准
  group_by(SUBJID, ARM) %>%
  # 提取BL0基准日,计算与各时间点的天数差并转成字符型
  mutate(
    base_date = first(TP.DATE[TIMEPOINT == "BL0"]),
    Dref = as.character(as.integer(TP.DATE - base_date))
  ) %>%
  ungroup() %>%
  # 保留指定时间点的行
  filter(TIMEPOINT %in% c("BL0", "FU1", "FU2")) %>%
  # 移除临时基准日列
  select(-base_date)

# 查看最终结果
print(df_processed)

步骤说明

  • 日期格式转换:用ymd()将字符型的日期转为R可识别的日期对象,为后续计算间隔做准备。
  • 分组逻辑:按SUBJID和ARM分组,确保多受试者/多组别场景下,每个组都使用自己的BL0日期作为基准。
  • 天数间隔计算:提取当前组内BL0对应的日期作为基准,计算每个时间点与基准日的天数差,转成字符型以匹配目标结果格式。
  • 行筛选:仅保留BL0、FU1、FU2三个时间点的数据。
  • 临时列清理:移除用于计算的临时基准日列,得到干净的最终结果。

运行后得到的结果与需求完全一致:

# A tibble: 3 × 7
  SUBJID ARM   TIMEPOINT TP.DATE    TPR_ar     TPR_ir     Dref 
   <dbl> <chr> <chr>     <date>     <chr>      <chr>      <chr>
1      1 A     BL0       2020-05-13 Undefined  Undefined  0    
2      1 A     FU1       2020-08-04 SD         SD         83   
3      1 A     FU2       2020-10-06 PR         PR         146  

内容的提问来源于stack exchange,提问作者D. Shin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:10:39