簡體   English   中英

R中的正則表達式問題與gsub - 重新格式化字符串向量到數字

[英]Regex issue in R with gsub - reformat string vector to numeric

我試圖采用格式不佳的美元值的字符向量並將其轉換為數字。 值的格式如下所示,帶有前導和尾隨空格,逗號和美元符號:

x <- c(" 18,000.50 ", " $1,240.30 ", " $125.00 ")

我試圖使用以下函數來擺脫除數字和點之外的所有字符,但它不起作用:

trim_currency <- function(x) grep("\$([0-9.]*)\,([0-9.]*)", x, values=TRUE)

我得到了正則表達式代碼

\$([0-9.]*)\,([0-9.]*)

使用此正則表達式測試程序http://regex101.com/r/qM2uG0成功運行

當我在R中運行它時,我收到以下錯誤:

Error: '\$' is an unrecognized escape in character string starting "\$"

關於如何在R中做到這一點的任何想法?


感謝ndoogan的回應。 這解決了這個特殊問題。 但是,如果我想讓它更通用,我會問:

我如何使用R / regex通過過濾器運行向量,只允許數字和句點通過?

x <- c(" 18,000.50 ", " $1,240.30 ", " $125.00 ")
gsub("[,$ ]","",x)
#[1] "18000.50" "1240.30"  "125.00"

在括號內添加更多字符以消除不同的內容。 我假設示例x在這里是詳盡無遺的。

更新

如果您知道自己只對數字和小數點感興趣,那么您可以這樣做:

gsub("[^0-9.]","",x)
#[1] "18000.50" "1240.30"  "125.00"

方括號內的^ 否定了方括號中語句的含義。

最后,要將結果值轉換為數字形式,請將gsub()函數(或包含其輸出的對象gsub()包裝在as.numeric()

as.numeric(gsub("[^0-9.]","",x))
#[1] 18000.5  1240.3   125.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM