采用Last Observation Carried Backward填充患者数据连续NA值的R实现需求
问题描述
现有患者数据框,需对Start_Window字段的NA值按以下规则替换:
- 同一患者下的连续NA段,用该段最后一行的
Start_Date向前填充整个连续段 - 单个NA值直接使用对应行的
Start_Date填充
原始数据如下:
| 行号(Row_Num) | 患者ID(Patient_ID) | 起始日期(Start_Date) | 起始窗口(Start_Window) |
|---|---|---|---|
| 1 | 001 | 2023-04-01 | 2023-04-01 |
| 2 | 001 | 2023-04-03 | NA |
| 3 | 001 | 2023-04-05 | NA |
| 4 | 001 | 2023-04-06 | NA |
| 5 | 001 | 2023-04-08 | NA |
| 6 | 001 | 2023-04-09 | 2023-04-09 |
| 7 | 001 | 2023-04-11 | 2023-04-11 |
| 8 | 001 | 2023-04-13 | NA |
| 9 | 001 | 2023-04-16 | NA |
| 10 | 001 | 2023-04-18 | 2023-04-18 |
| 11 | 002 | 2023-04-02 | 2023-04-02 |
| 12 | 002 | 2023-04-04 | 2023-04-04 |
| 13 | 002 | 2023-04-07 | 2023-04-07 |
| 14 | 002 | 2023-04-08 | 2023-04-08 |
| 15 | 002 | 2023-04-10 | NA |
可复现代码:
# 创建数据框 df <- data.frame( Row_Num = c(1:15), Patient_ID = c(rep(001, 10), rep(002, 5)), Start_Date = c("2023-04-01", "2023-04-03", "2023-04-05", "2023-04-06", "2023-04-08", "2023-04-09", "2023-04-11", "2023-04-13", "2023-04-16", "2023-04-18", "2023-04-02", "2023-04-04", "2023-04-07", "2023-04-08", "2023-04-10"), Start_Window = c("2023-04-01", NA, NA, NA, NA, "2023-04-09", "2023-04-11", NA, NA, "2023-04-18", "2023-04-02", "2023-04-04", "2023-04-07", "2023-04-08", NA) ) # 打印数据框 print(df)
解决方案
使用dplyr包实现分组处理,步骤如下:
- 将日期列转换为
Date类型,避免字符操作问题 - 按患者ID分组,识别连续的NA段
- 对每个NA段,用组内最后一行的
Start_Date填充;单个NA直接使用本行Start_Date
完整代码:
library(dplyr) # 转换日期列类型 df <- df %>% mutate( Start_Date = as.Date(Start_Date), Start_Window = as.Date(Start_Window) ) # 处理NA填充 df_processed <- df %>% group_by(Patient_ID) %>% # 创建NA分组标记:连续的NA为同一组,非NA标记为0 mutate( na_group = cumsum(!is.na(Start_Window)) ) %>% group_by(Patient_ID, na_group) %>% # 对每个NA组,用组内最后一行的Start_Date填充 mutate( Start_Window = ifelse(is.na(Start_Window), last(Start_Date), Start_Window) ) %>% ungroup() %>% select(-na_group) # 移除临时分组列 # 查看结果 print(df_processed)
结果验证
处理后的数据符合要求:
- 行2-5的
Start_Window统一填充为2023-04-08 - 行8-9的
Start_Window统一填充为2023-04-16 - 行15的
Start_Window填充为2023-04-10
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

