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

在R语言中用正则提取含€的欧元日房费列数值

解决方案

方法1:直接提取数值(无视乱码符号)

不管那个乱码的欧元符号,直接从字符串里抠出数字就行,两种实用方法:

base R 原生方法

用gsub()把所有非数字、非小数点的内容清空,再转成数值型:

train$average_daily_rate_num <- as.numeric(gsub("[^0-9.]", "", train$average_daily_rate))

[^0-9.]是正则表达式,匹配所有不是数字和小数点的字符,替换成空字符串后,剩下的就是纯数字内容。

stringr 包简化写法

如果装了stringr包,提取逻辑更直观:

library(stringr)
train$average_daily_rate_num <- as.numeric(str_extract(train$average_daily_rate, "\\d+(\\.\\d+)?"))

\\d+(\\.\\d+)?专门匹配整数或小数格式的数字,直接提取后转成数值即可。

方法2:从根源修复编码问题

欧元符号变成€本质是CSV导入时编码不匹配,重新导入时指定正确编码就能让符号显示正常(€):

# 先试UTF-8编码
train <- read.csv("你的文件路径.csv", encoding = "UTF-8")
# 要是不行就换latin1编码(欧元符号在latin1里是特殊字符\x80)
train <- read.csv("你的文件路径.csv", encoding = "latin1")

符号正常后,再清理数值就更清晰:

train$average_daily_rate_num <- as.numeric(gsub("[€ ]", "", train$average_daily_rate))

特殊情况处理

如果数据里有千分位逗号(比如"1,200 €"),得先把逗号去掉再提取:

train$average_daily_rate_num <- as.numeric(gsub("[^0-9.]", "", gsub(",", "", train$average_daily_rate)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:50:26