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

使用R正则表达式拆分数据框中的价格数值与货币列

R正则拆分价格与货币列解决方案

问题修正与完整实现

你之前的代码存在几个问题:原始数据框定义错误、正则未正确转义、未提取货币列、未处理数值中的逗号。以下是完整可运行的实现:

首先构造正确的数据框:

library(dplyr)
library(stringr)
library(tidyr)

# 构造包含价格列的数据框
df <- data.frame(price = c("50,000 USD", "40,000 EUR", "8,500 GBP"))

方法一:使用tidyr::separate(更直观)

利用正向预查匹配货币前的空格,拆分后处理数值格式:

df_processed <- df %>%
  separate(price, into = c("priceValue", "currency"), 
           sep = "\\s+(?=\\w{3}$)",  # 匹配货币代码前的空格
           convert = FALSE) %>%
  mutate(priceValue = as.numeric(str_replace(priceValue, ",", "")))

方法二:使用stringr系列函数

直接提取货币和数值部分:

df_processed <- df %>%
  mutate(
    currency = str_extract(price, "\\w{3}$"),  # 提取末尾3位货币代码
    priceValue = str_remove(price, "\\s+\\w{3}$") %>%  # 移除货币部分
      str_replace(",", "") %>%  # 去掉千分位逗号
      as.numeric()  # 转为数值类型
  )

关键说明

  • 正则\\s+(?=\\w{3}$):(?=...)是正向预查,确保只匹配紧跟3位字母(货币代码)的空格,避免误拆分数值中的逗号。
  • 必须处理数值中的逗号:直接转数值会失败,需先用str_replace移除逗号。
  • R中字符串的正则转义:需用双反斜杠\\,或使用原始字符串r"{\\s+(?=\w{3}$)}"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:11:05