[英]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.