如何基于源数据集的疾病代码匹配填充新数据集的疾病名称?
解决方法
你原来的代码存在几个明显问题:
- 逻辑判断用了赋值符号
=,正确的逻辑相等判断应该用== - 错误引用了不存在的
de$DESCRIPTION,实际应该调用源数据的df$colB - 直接跨数据集使用
case_when会因为行数不匹配导致错误,这种场景不适合用case_when做匹配
针对你的需求,这里提供两种高效可行的解决方案:
方案一:使用dplyr的连接操作(推荐)
通过左连接匹配疾病名称,再填充空值,保留已有正确值:
library(dplyr) df1 <- df1 %>% # 左连接源数据,匹配col1对应的colB left_join(df, by = "col1", suffix = c("", "_from_df")) %>% # 填充col2的空值,已有值保持不变 mutate(col2 = ifelse(col2 == "", colB, col2)) %>% # 删除临时生成的colB列 select(-colB)
方案二:使用match函数直接定位填充
如果不想使用连接操作,可通过match找到对应位置直接赋值:
# 找到df1中每个col1在df的col1里的位置索引 match_indices <- match(df1$col1, df$col1) # 仅填充col2为空的行 df1$col2[df1$col2 == ""] <- df$colB[match_indices][df1$col2 == ""]
两种方法都能轻松处理400+条记录的数据集,不会有性能问题。
内容的提问来源于stack exchange,提问作者Dogesh
相关产品推荐
相关产品推荐

