在R中删除带或不带减号的数字

时间:2015-04-07 12:29:38

标签: regex r data-manipulation

我们有一个列的值为233 CA,-124 KZ,231 CA,2,341 CA,300KZ。

我们只需添加带或不带减号的所有数字。

这里我们要输出:2981
  (即233 -124 +231 +2341 +300)

3 个答案:

答案 0 :(得分:2)

如果您想成为专家,请使用Gabor的解决方案。如果你想偶尔用户试试:

library(DescTools)
x <- c("233 CA", "-124 KZ", "231 CA", "2,341 CA", "300KZ")

sum(StrVal(x, paste = TRUE, as.numeric = TRUE))

答案 1 :(得分:1)

尝试一次gsub电话:

vec=c('233 CA', '-124 KZ', '231 CA' , '2,341 CA', '300KZ')

sum(as.numeric(gsub('[[:alpha:]|[:blank:]|,]','',vec)))
#[1] 2981

答案 2 :(得分:1)

下次请发送有效的R代码作为输入。我这次是在下面的第一行为你完成的。

1)sub / gsub 我们使用gsub删除逗号,然后匹配可选的减号后跟数字后跟任何内容,然后将其替换为括号内正则表达式的部分。最后我们转换为数字和总和:

x <- c("233 CA", "-124 KZ", "231 CA", "2,341 CA", "300KZ")

sum(as.numeric(sub("(-?\\d+).*", "\\1", gsub(",", "", x))))

,并提供:

[1] 2981

以下是第一个正则表达式的可视化:

(-?\d+).*

Regular expression visualization

Debuggex Demo

2)strapply 使用相同的输入x,gsubfn包中的strapply使用稍微简单的正则表达式解决它。删除逗号后,我们匹配一个可选的减号后跟数字,将每个匹配转换为数字,然后使用sum来简化结果:

library(gsubfn)

strapply(gsub(",", "", x), "-?\\d+", as.numeric, simplify = sum)