在R中对数据框labelled列使用replace_na()等函数时遇类型转换错误
解决labelled列使用replace_na时的类型不匹配错误
问题核心
用tidyr::replace_na填充Hmisc包标记的labelled列时,mean()返回的普通double类型值无法匹配原列的labelled类型,导致vec_assign抛出类型转换错误。
解决方案
下面是三种直接可行的处理方式:
方法1:给替换值添加同类型标签
把均值结果转换成和原列一致的labelled类型,保留原列的标签属性:
df %>% mutate(`hi hi` = paste0(`hi hi`, "people"), `bye bye` = replace_na(`bye bye`, labelled(mean(`bye bye`, na.rm = T), label = attr(`bye bye`, "label"))))
方法2:先转普通类型处理,再恢复标签
如果暂时不需要labelled类型,处理后再重新添加原标签:
df %>% mutate(`hi hi` = paste0(`hi hi`, "people"), `bye bye` = as.double(`bye bye`) %>% replace_na(mean(., na.rm = T)) %>% labelled(label = attr(df$`bye bye`, "label")))
方法3:用Hmisc自带的impute函数(最简洁)
Hmisc::impute原生支持labelled列,直接指定用均值填充缺失值:
df %>% mutate(`hi hi` = paste0(`hi hi`, "people"), `bye bye` = Hmisc::impute(`bye bye`, mean))
效果验证
执行任意一种方法后,bye bye列的NA会被均值3填充,同时保留原列的标签属性(方法1、3),不会再触发类型不匹配错误。
内容的提问来源于stack exchange,提问作者Mathica
相关产品推荐
相关产品推荐

