R语言按患者ID分组生成指定行切换0/1的二进制指标实现方法
R语言实现患者确诊状态标记需求
实现逻辑
对每个ID分组后,给组内的观测行按顺序生成行号,当行号大于等于TimeToDx的值时标记为1,否则标记为0,完全匹配「前TimeToDx-1行填充0,剩余行填充1」的要求。
方案1:tidyverse(dplyr)实现(推荐,可读性高)
先加载依赖包,再分组处理:
# 未安装dplyr先执行 install.packages("dplyr") library(dplyr) df <- df %>% group_by(ID) %>% # 按患者ID分组 mutate(Status = as.integer(row_number() >= TimeToDx)) %>% # 按组内行号判断生成状态 ungroup() # 解除分组避免后续操作受分组影响
方案2:基础R实现(无需额外安装依赖)
用内置的ave函数实现分组计算:
# 按ID分组生成组内行号,直接判断生成Status字段 df$Status <- as.integer(ave(df$ID, df$ID, FUN = seq_along) >= df$TimeToDx)
效果验证
你可以用以下代码构造示例数据测试,运行上述处理逻辑后得到的结果和你给出的预期输出完全一致:
# 构造示例原始数据 df <- read.table(text = "ID TimeToDx Status 10425 2 NA 10425 2 NA 10425 2 NA 10425 2 NA 10667 3 NA 10667 3 NA 10667 3 NA 10667 3 NA 10667 3 NA 10686 2 NA 10686 2 NA 10686 2 NA 10686 2 NA 10686 2 NA 17096 5 NA 17096 5 NA 17096 5 NA 17096 5 NA 17096 5 NA", header = TRUE)
内容的提问来源于stack exchange,提问作者Jonathon P
相关产品推荐
相关产品推荐

