假设我有一个字符串如下
"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+")
但如何捕获所有相同的字符串以便添加它们?
答案 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
模式的转换。