我们有一个列的值为233 CA,-124 KZ,231 CA,2,341 CA,300KZ。
我们只需添加带或不带减号的所有数字。
这里我们要输出:2981
(即233 -124 +231 +2341 +300)
答案 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+).*
2)strapply 使用相同的输入x
,gsubfn包中的strapply
使用稍微简单的正则表达式解决它。删除逗号后,我们匹配一个可选的减号后跟数字,将每个匹配转换为数字,然后使用sum
来简化结果:
library(gsubfn)
strapply(gsub(",", "", x), "-?\\d+", as.numeric, simplify = sum)