R使用recode函数替换字符变量空值为NA时报错如何解决
问题原因
报错Error: attempt to use zero-length variable name的直接原因是:你在recode()函数中使用"" = NA_character_的语法时,R会把左侧的空字符串解析为变量名,而R不允许零长度的变量名,因此触发报错。
另外你用到的mutate_at、funs都是dplyr 1.0.0版本前的旧语法,目前已经被官方弃用,新版本dplyr运行时还会额外抛出弃用警告。
可行修复方案
推荐使用dplyr目前主推的across()+case_when()写法,语法更清晰,也不会出现空字符串匹配的报错:
library(dplyr) # 用你提供的模拟数据测试可直接运行 gender_1 <- as.character(c('F', '', 'F', 'M')) gender_2 <- as.character(c('', 'M', 'F', 'M')) a_gender <- as.character(c('', '', 'F', '')) df <- data.frame(gender_1, gender_2, a_gender) # 重编码代码 df <- df %>% mutate(across(c(gender_1, gender_2, a_gender), ~ case_when( . == "M" ~ "Male", . == "F" ~ "Female", . == "" ~ NA_character_ )))
如果你坚持要使用recode()的写法,只需要给空字符串的匹配键用反引号直接包裹即可(反引号中间不需要加其他内容):
df <- df %>% mutate(across(c(gender_1, gender_2, a_gender), ~ recode(., "M" = "Male", "F" = "Female", `` = NA_character_)))
效果验证
运行后空字符串会被统一替换为NA,性别编码也会同步转换:
| gender_1 | gender_2 | a_gender |
|---|---|---|
| Female | NA | NA |
| NA | Male | NA |
| Female | Female | Female |
| Male | Male | NA |
内容的提问来源于stack exchange,提问作者Alice
相关产品推荐
相关产品推荐

