如何对R中字符串中数字的所有实例求和

时间:2016-08-02 08:16:41

标签: r

假设我有一个字符串如下

"The specimen is 34 x 1 x 5 mm and there is also another thing in there that is 22 x 4 x 1 mm and a further thing of 11 x 4 x 8 so this should be added together"

我想将每个东西的立方毫米加在一起并放在我的数据框中的单独字段中。

我有正则表达式来执行此操作,但我不知道如何捕获每个实例,因此我可以将它们一起添加。结果应为1226 mm3

捕获我使用的一个实例:

chunky <- str_extract(EndoSubsetEMRSizes$NatureOfSpec, "\\d+\\s*x\\s*\\d+\\s*x\\s*\\d+")

但如何捕获所有相同的字符串以便添加它们?

2 个答案:

答案 0 :(得分:2)

来自rollapply包的zoo的另一个想法,

library(zoo)
library(stringr)
sum(rollapply(as.numeric(str_extract_all(x, '[0-9]+')[[1]]), 3, by = 3, prod))
#[1] 610

或将其应用于专栏

sapply(EndoSubsetEMRSizes$NatureOfSpec, function(x)
          sum(rollapply(as.numeric(str_extract_all(x, '[0-9]+')[[1]]), 3, by = 3, prod))

答案 1 :(得分:0)

另一个选择

library(magrittr)
matrix(na.exclude(as.numeric(strsplit(x,split = "\\s")[[1]])),byrow = T,ncol = 3) %>% apply(.,MARGIN = 1,FUN = prod) %>% sum()

我也得到610作为答案。

注意:Warning message归因于numeric模式的转换。