繁体   English   中英

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

[英]Can extract_numeric deal with negative numbers?

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

例如,

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

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

法案

PS:虽然它今天不关心我,但我怀疑诸如“ - $ 2.00”之类的情况使任何一般解决方案复杂化。

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

但正则表达式可能会做得更好,只允许在开始时使用减号...

如果字符串中有一个数字,只需使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM