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

R语言清理薪资数据:无K值行生成NA问题求助

问题原因

你遇到的NA是因为不含"K"的薪资字符串里包含千分位逗号(比如45,360),直接用as.numeric()无法解析带逗号的字符串,导致强制转换时生成NA。

解决方案

方案1:使用readr::parse_number(推荐)

parse_number可以自动忽略字符串中的逗号、字母等非数字字符,直接提取数值,再根据是否含"K"决定是否乘以1000:

library(dplyr)
library(readr)

yearly %>%
  mutate(
    min_salary = case_when(
      str_detect(min_salary, "K") ~ parse_number(min_salary) * 1000,
      TRUE ~ parse_number(min_salary)
    ),
    max_salary = case_when(
      str_detect(max_salary, "K") ~ parse_number(max_salary) * 1000,
      TRUE ~ parse_number(max_salary)
    )
  )

方案2:手动处理逗号(不依赖额外包)

先去掉字符串中的逗号,再进行转换:

library(dplyr)

yearly %>%
  mutate(
    min_salary = case_when(
      str_detect(min_salary, "K") ~ as.numeric(gsub("[^0-9.]", "", min_salary)) * 1000,
      TRUE ~ as.numeric(gsub(",", "", min_salary))
    ),
    max_salary = case_when(
      str_detect(max_salary, "K") ~ as.numeric(gsub("[^0-9.]", "", max_salary)) * 1000,
      TRUE ~ as.numeric(gsub(",", "", max_salary))
    )
  )

更简洁的批量处理写法

用across函数批量处理min_salary和max_salary两列,避免重复代码:

library(dplyr)
library(readr)

yearly %>%
  mutate(across(c(min_salary, max_salary), ~ case_when(
    str_detect(.x, "K") ~ parse_number(.x) * 1000,
    TRUE ~ parse_number(.x)
  )))

内容的提问来源于stack exchange,提问作者moonyoung hwang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:25:56