You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 18:05:37