有没有办法使用tidyr的extract_numeric()来提取负数?
例如,
> extract_numeric("2%")
[1] 2
> extract_numeric("-2%")
[1] 2
我真的很喜欢第二次回电-2。
比尔
PS:虽然它今天并不关心我,但我怀疑像是" - $ 2.00"使任何一般解决方案复杂化。答案 0 :(得分:3)
extract_numeric
非常简单:
> extract_numeric
function (x)
{
as.numeric(gsub("[^0-9.]+", "", as.character(x)))
}
<environment: namespace:tidyr>
它只是替换任何不是0到9或“。”的字符。没有。所以“-1”将变成1,你无能为力......除了可以向tidyr提出增强请求,或者自己编写...
extract_num = function(x){as.numeric(gsub("[^0-9\\-]+","",as.character(x)))}
将会这样做:
> extract_num("-$1200")
[1] -1200
> extract_num("$-1200")
[1] -1200
> extract_num("1-1200")
[1] NA
Warning message:
In extract_num("1-1200") : NAs introduced by coercion
但正则表达式可能会做得更好,只能在开始时允许减号......
答案 1 :(得分:0)
如果字符串中只有一个数字,请使用sub
。这是一种方法:
功能:
myfun <- function(s) as.numeric(sub(".*?([-+]?\\d*\\.?\\d+).*", "\\1", s))
示例:
> myfun("-2%")
[1] -2
> myfun("abc 2.3 xyz")
[1] 2.3
> myfun("S+3.")
[1] 3
> myfun(".5PPP")
[1] 0.5