使用dplyr的replace_na通过管道操作无法替换缺失值该如何解决?
报错原因
tidyr::replace_na()不支持直接调用同数据集的其他列作为填充值,该函数的第二个参数要求传入命名列表,且列表中每个对应填充值都是固定标量,你传入的列名引用无法被该函数识别,因此抛出未识别参数的报错。
解决方案
1. 使用dplyr::coalesce()(最高效推荐)
该函数专门用于返回输入向量中第一个非缺失值,完美适配两个互补变量的填充需求,代码如下:
library(dplyr) # 用varname2的取值填充varname1的缺失值 df <- df %>% mutate(varname1 = coalesce(varname1, varname2))
如果需要将两个互补变量合并为一个新的无缺失变量,调整写法即可:
df <- df %>% mutate(new_complete_var = coalesce(varname1, varname2))
2. 条件判断实现(无需额外函数依赖)
你也可以用基础R或者ifelse()逻辑实现相同效果:
# 基础R写法 df$varname1[is.na(df$varname1)] <- df$varname2[is.na(df$varname1)] # dplyr + ifelse写法 df <- df %>% mutate(varname1 = ifelse(is.na(varname1), varname2, varname1))
内容的提问来源于stack exchange,提问作者Jeffrey Harding
相关产品推荐
相关产品推荐

