在R中合并数据后基于变量存在性创建新列
解决方案:为患者数据框添加治疗标记列
核心需求实现
要保留df1所有行,并基于df2的患者ID生成0/1标记的tx列,同时捕获df2中可能存在的无效ID,可按以下步骤操作:
1. 合并数据并生成标记列
直接在左连接时给df2预先添加标记,再统一处理缺失值:
library(dplyr) # 为df2新增tx=1的列,再与df1左连接,最后将缺失值转为0 df_combined <- df1 %>% left_join(df2 %>% mutate(tx = 1), by = "id") %>% mutate(tx = ifelse(is.na(tx), 0, tx))
逻辑说明:
- 先给
df2的所有行添加tx=1,代表这些患者接受了额外治疗 - 与
df1左连接后,未匹配到df2的行tx会显示为NA,用ifelse将这些NA转为0,代表未接受治疗
运行后即可得到目标结果:
id date tx 0001 2/2/22 0 0002 1/1/22 1 0002 3/2/22 1 0003 3/2/22 0 0003 5/2/22 0 0004 6/7/22 1 0004 9/2/22 1
2. 捕获无效ID
如果df2中存在df1没有的ID,可通过以下代码检测并提示:
# 找出df2中不在df1里的ID invalid_ids <- df2$id[!df2$id %in% df1$id] # 若存在无效ID,抛出警告 if (length(invalid_ids) > 0) { warning(paste("df2中存在df1未包含的ID:", paste(invalid_ids, collapse = ", "))) }
内容的提问来源于stack exchange,提问作者Jackie
相关产品推荐
相关产品推荐

