可以提取数字处理负数吗?

时间:2014-08-13 16:15:12

标签: r tidyr

有没有办法使用tidyr的extract_numeric()来提取负数?

例如,

> extract_numeric("2%")
[1] 2
> extract_numeric("-2%")
[1] 2

我真的很喜欢第二次回电-2。

比尔

PS:虽然它今天并不关心我,但我怀疑像是" - $ 2.00"使任何一般解决方案复杂化。

2 个答案:

答案 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