R语言:将字符变量标签转换为对应数值变量时遇NA问题
问题原因分析
你遇到NA的核心问题是映射列表的键与AQI_desc列的实际字符串完全不匹配:
AQI_desc的格式是「数字) 描述」(比如"6) Hazardous"),但你定义的char_to_num只写了描述部分,没有包含开头的数字和括号;- 映射键存在多余空格(比如
"Unhealthy "多了两个空格、"Good "末尾多空格),和数据里的字符串无法匹配。
解决方案
方法一:直接提取字符串开头的数字(最简便)
既然AQI_desc开头已经明确标注了对应数字,直接提取转成数值即可,无需手动维护映射表:
# 用base R实现 data$AQI_num <- as.integer(sub("^([0-9]+).*", "\\1", data$AQI_desc)) # 或者用stringr包(更直观) library(stringr) data$AQI_num <- as.integer(str_extract(data$AQI_desc, "^\\d+"))
方法二:修正映射表后匹配
如果必须用映射表,要确保键和AQI_desc的内容完全一致,包括空格、符号:
# 修正后的映射表 char_to_num <- list( "2) Moderate" = 2, "3) Unhealth for sens. groups" = 3, "4) Unhealthy" = 4, "5) Very unhealthy" = 5, "6) Hazardous" = 6 ) # 用base R生成新变量 data$AQI_num <- unlist(char_to_num[data$AQI_desc]) # 或者用dplyr的recode函数 library(dplyr) data <- data %>% mutate(AQI_num = recode(AQI_desc, !!!char_to_num))
内容的提问来源于stack exchange,提问作者Reuben Newton Addison
相关产品推荐
相关产品推荐

