在R语言中提取患者多次随访数据的末次随访天数并新增列
问题
我有一个记录患者移植后随访数据的dataframe,包含两个变量:
patient_ID(患者标识)days_tx_followup(移植至随访事件的间隔天数)
每行对应一次随访,每位患者的随访次数及随访间隔天数均不相同。需要提取每位患者末次随访的间隔天数,并在该患者的所有随访记录行中新增一列last_followup存储该值。真实数据集约有15000名患者,尝试从嵌套dataframe中提取该值但未成功。
示例数据:
patient_ID <- c("A", "A", "A", "A", "B", "B", "C", "C", "C") days_tx_followup <- c(0, 5, 10, 15, 2, 4, 1, 2, 3) df <- data.frame(patient_ID, days_tx_followup)
初始dataframe输出:
patient_ID days_tx_followup 1 A 0 2 A 5 3 A 10 4 A 15 5 B 2 6 B 4 7 C 1 8 C 2 9 C 3
期望输出:
patient_ID days_tx_followup last_followup 1 A 0 15 2 A 5 15 3 A 10 15 4 A 15 15 5 B 2 4 6 B 4 4 7 C 1 3 8 C 2 3 9 C 3 3
解决方案
以下是几种适配大数据场景的高效处理方案:
方法1:使用dplyr(tidyverse生态)
代码可读性强,适合常规数据分析流程:
library(dplyr) df <- df %>% group_by(patient_ID) %>% mutate(last_followup = max(days_tx_followup)) %>% ungroup()
方法2:使用data.table(大数据优化)
针对大规模数据性能更优,适配15000患者的数据集:
library(data.table) setDT(df) df[, last_followup := max(days_tx_followup), by = patient_ID]
方法3:使用Base R(无需额外包)
无需加载第三方依赖,轻量实现需求:
df$last_followup <- ave(df$days_tx_followup, df$patient_ID, FUN = max)
以上三种方法均可快速计算每位患者的末次随访天数,并将该值填充至对应患者的所有行中。
内容的提问来源于stack exchange,提问作者kobue1
相关产品推荐
相关产品推荐

