在R语言中为临床数据框添加给药剂量变更行的技术问询
解决方案:用dplyr添加临床数据的剂量变更并保持格式
步骤1:加载依赖包
先加载dplyr和tibble来简化数据处理:
library(dplyr) library(tibble)
步骤2:确认原始数据
你的原始数据结构如下:
df <- data.frame(ID = c(1,1,1,2,2,3,3,3), DOSE = c(100, NA, NA, 200, NA, 300, NA, NA), TIME = c(NA, 1, 2, NA, 3, NA, 1, 2), Drug_concentration = c(NA, 5, 6.5, 3, 4, 8, 10, 12))
步骤3:整理剂量变更信息
把需要调整的剂量信息整理成小数据框,明确患者ID、变更后的剂量,以及变更发生的时间点:
dose_changes <- tibble( ID = c(1, 3), # 需调整剂量的患者ID target_time = c(2, 2), # 剂量变更发生的时间点 new_dose = c(50, 500) # 变更后的剂量值 )
步骤4:给原始数据添加排序标记
为了准确定位插入位置,给每个患者的行分配组内排序编号:
df_with_sort <- df %>% group_by(ID) %>% mutate(sort_key = row_number()) # 每个ID内的行按原始顺序编号 ungroup()
步骤5:生成待插入的剂量变更行
把变更信息转换成和原始数据格式一致的行,并设置插入位置的排序键(确保插在目标时间行的前面):
insert_rows <- dose_changes %>% # 关联到目标时间行的排序键 left_join( df_with_sort %>% filter(!is.na(TIME)), by = c("ID", "target_time" = "TIME") ) %>% # 生成符合原始格式的行:DOSE为新剂量,TIME和浓度设为NA mutate( DOSE = new_dose, TIME = NA, Drug_concentration = NA, sort_key = sort_key - 0.5 # 让插入行排在目标时间行之前 ) %>% # 匹配原始数据的列顺序 select(ID, DOSE, TIME, Drug_concentration, sort_key)
步骤6:合并并排序得到最终数据
把原始数据和插入行合并,按ID和排序键排序后移除临时排序标记:
final_df <- bind_rows(df_with_sort, insert_rows) %>% arrange(ID, sort_key) %>% select(-sort_key) # 删除临时排序键 # 查看最终结果 print(final_df)
运行后得到的结果完全符合你的格式要求:
ID DOSE TIME Drug_concentration 1 1 100 NA NA 2 1 NA 1 5 3 1 50 NA NA 4 1 NA 2 6.5 5 2 200 NA NA 6 2 NA 3 4 7 3 300 NA NA 8 3 NA 1 10 9 3 500 NA NA 10 3 NA 2 12
方法说明
- 通过排序键定位插入位置,能高效处理多个患者的批量剂量变更
- 严格保留原始数据格式:剂量行仅存DOSE值,时间点行仅存TIME和浓度数据
- 后续新增变更只需修改
dose_changes数据框即可,扩展性强
内容的提问来源于stack exchange,提问作者Thatboy123
相关产品推荐
相关产品推荐

