2016-04-28 61 views
1

我的数据是这样的:解析价格出来的字符串与R中的正则表达式的

L/S Price 
$555,000Previous Price: $575,000 
$865,000Previous Price: $875,000 
$995,000 
$1,325,000Previous Price: $1,459,000 

我想结果是这样的:

555000 
865000 
995000 
1325000 

我能想出是最好的正则表达式([0-9,])+但这有几个问题,例如也匹配只是噪音的“以前的价格”。我在我的正则表达式中加入了逗号,这样我就可以匹配整个价格,即使我最终需要删除逗号。

或者,我想我可以选择我不想要的部分,如([a-zA-Z]).+之类的东西,然后将其删除,尽管我在执行此操作时遇到了问题。

这里有一个dput

> dput(mls_res$`L/S Price`[1:4]) 
c("$555,000Previous Price: $575,000", "$865,000Previous Price: $875,000", 
"$995,000 ", "$1,325,000Previous Price: $1,459,000") 

回答

1

我们既可以使用捕捉组((...))来捕获从字符串的数字元素,然后与拍摄组的逆向引用替换

as.numeric(gsub("^\\D*([0-9]+),*([0-9]+),([0-9]+).*", "\\1\\2\\3", str1)) 
#[1] 555000 865000 995000 1325000 

或者只是匹配非数字字符并将其替换为""

as.numeric(gsub("[$,]|[[:alpha:]]+.*", "", str1)) 
#[1] 555000 865000 995000 1325000 
+1

@哈克-R我一些解释更新。 – akrun

+0

注意:有偏见的upvoting在:-) – akrun

3

随着库stringr,你可以做这样的事情:

library(stringr) 
df <- c('$555,000Previous Price: $575,000', '$865,000Previous Price: $875,000', '$995,000', '$1,325,000Previous Price: $1,459,000') 
as.numeric(gsub('\\$|,', '', str_extract(df, '^\\$[0-9,]*'))) 
2

这似乎很简单,不涉及包。它删除P和其后的所有内容,然后删除剩下的所有非数字。最后它将其转换为数字。

as.numeric(gsub("\\D", "", sub("P.*", "", s))) 
## [1] 555000 865000 995000 1325000 

如果最后一位数字后面跟着一些其他字母,那么用P代替[[:alpha:]]

注:我们用这个输入:

s <- c("$555,000Previous Price: $575,000", "$865,000Previous Price: $875,000", 
     "$995,000 ", "$1,325,000Previous Price: $1,459,000") 
相关问题