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

R语言提取IPL 2023薪资列USD数值失败,全为NA求解决

解决IPL 2023薪资数据提取USD数值时全为NA的问题

你的原代码出现全NA的核心问题有两个:一是正则表达式没覆盖带"million"的薪资格式,二是str_extract_all返回列表的处理逻辑有漏洞,且没做单位转换。以下是修正方案:

问题分析

原代码的正则\\(US\\$([0-9.,]+)\\)只能匹配纯数字(带逗号/小数点)的USD部分,像(US$2.0 million)这种带单位的会直接匹配失败,导致提取结果为空,最终转成NA。另外str_extract_all会返回每个元素的所有匹配结果(列表形式),后续处理没考虑到这一点,也没做单位转换。

修正后的代码

library(readxl)
library(stringr)

# 读取数据
ipl_2023_salaries <- read_excel(file_path)

# 提取括号内的USD完整内容(包含数字和单位)
usd_raw <- str_extract(ipl_2023_salaries$Salary, "\\(US\\$(.*?)\\)")

# 清理内容:去掉括号、US$,保留数字和单位
usd_clean <- str_remove_all(usd_raw, "\\(|\\)|US\\$")

# 处理数值和单位转换
usd_values <- sapply(usd_clean, function(x) {
  if (is.na(x)) {
    return(NA)
  }
  # 去掉千位逗号
  x_no_comma <- str_remove_all(x, ",")
  # 判断是否包含million单位
  if (str_detect(x_no_comma, "million")) {
    # 提取数字并转换为完整数值
    num <- as.numeric(str_extract(x_no_comma, "[0-9.]+")) * 1000000
  } else {
    # 直接转换为数值
    num <- as.numeric(x_no_comma)
  }
  return(num)
})

# 替换原薪资列
ipl_2023_salaries$Salary <- usd_values

print(ipl_2023_salaries)

关键改进点

  • 用str_extract替代str_extract_all:每个薪资条目只有一个USD数值,单匹配足够,避免列表处理的复杂问题
  • 正则调整为\\(US\\$(.*?)\\):捕获括号内的所有内容,包括带"million"的部分
  • 增加单位转换逻辑:识别"million"并将数值放大100万倍,同时处理千位逗号的清理
  • 完善NA值处理:确保空值或匹配失败的条目返回NA,不影响整体转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:43:19