在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
相关产品推荐
相关产品推荐

