如何根据info_geo变量值替换info_geo_actzd中的NA值
问题分析与解决方法
你的写法存在几个核心问题:
- 第一个
case_when未限定仅处理info_geo_actzd为缺失值的场景,只要info_geo是"No"就直接覆盖所有值,且TRUE ~ .的写法错误,应明确引用原列。 - 第二个
ifelse用单引号包裹变量名,变成了字符串字面量对比('info_geo' == 'No'永远为假),同时缺少else分支,No未加引号导致语法错误。 - 第三个
case_when使用any()对整列做判断,而非逐行处理,逻辑完全不符合需求。
正确的逻辑是:当info_geo为"No"且info_geo_actzd是缺失值时,将后者改为"No",其余情况保留原值。以下是两种可行写法:
方法1:使用case_when
db <- db %>% mutate(info_geo_actzd = case_when( info_geo == "No" & is.na(info_geo_actzd) ~ "No", TRUE ~ info_geo_actzd ))
方法2:使用if_else(更简洁)
db <- db %>% mutate(info_geo_actzd = if_else(info_geo == "No" & is.na(info_geo_actzd), "No", info_geo_actzd))
特殊情况处理
如果你的数据中info_geo_actzd的"NA"是字符串类型(不是真正的缺失值),则将is.na()替换为字符串对比:
db <- db %>% mutate(info_geo_actzd = case_when( info_geo == "No" & info_geo_actzd == "NA" ~ "No", TRUE ~ info_geo_actzd ))
内容的提问来源于stack exchange,提问作者FrancoBattiato
相关产品推荐
相关产品推荐

