在另一个字符串之后获取字符串

时间:2019-12-13 15:21:08

标签: r string stringr stringi

我有一个data.frame与下面显示的类似。如何获取字符串hourshour之前的2和1值并求和?

输入

test <- data.frame(value = c('Stick 1 whole clove into center of each diamond. Roast ham 2 hours. Reduce oven temperature to 300F. Continue to roast ham until golden, about 1 hour.'))

预期输出

> 3

Obs .:数字可以在任何字符串部分找到。但是hourhours之前的所有内容。

2 个答案:

答案 0 :(得分:2)

一种选择是使用正则表达式环顾四周,用str_extract_all提取“小时”之前的数字,将其转换为numeric并获得sum

library(stringr)
sum(as.numeric(str_extract_all(test$value, "\\d+(?=\\shour)")[[1]]))
#[1] 3

答案 1 :(得分:1)

查找数字,后跟空格和hour,但仅捕获数字。对于每个此类捕获,请将其转换为数字,然后求和。请注意,仅需要一个相对简单的正则表达式,并且如果test具有多行,则将其向量化并继续工作,如下面的第二个示例所示。

library(gsubfn)

sapply(strapply(as.character(test$value), "(\\d+) hour", as.numeric), sum)
## [1] 3

另一项测试:

test2 <- rbind(test, test)
sapply(strapply(as.character(test2$value), "(\\d+) hour", as.numeric), sum)
## [1] 3 3