2016-04-28 59 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") 
相關問題