我正在尝试使用格式不佳的美元值的字符向量并将其转换为数字。值的格式如下所示,带有前导和尾随空格,逗号和美元符号:
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通过过滤器运行向量,只允许数字和句点通过?
答案 0 :(得分:7)
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()
函数(或包含其输出的对象)包装在as.numeric()
中:
as.numeric(gsub("[^0-9.]","",x))
#[1] 18000.5 1240.3 125.0