在其他字符串之后获取字符串
Obtaining string after other string
我有一个 data.frame
类似于下面显示的。如何取字符串 hours
和 hour
之前的 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
观察:可以在任何字符串部分找到数字。但是在 hour
或 hours
.
之前的每个
一个选项是使用正则表达式环视来提取 'hour' 和 str_extract_all
之前的数字,将其转换为 numeric
并获得 sum
library(stringr)
sum(as.numeric(str_extract_all(test$value, "\d+(?=\shour)")[[1]]))
#[1] 3
查找后跟 space 和 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
我有一个 data.frame
类似于下面显示的。如何取字符串 hours
和 hour
之前的 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
观察:可以在任何字符串部分找到数字。但是在 hour
或 hours
.
一个选项是使用正则表达式环视来提取 'hour' 和 str_extract_all
之前的数字,将其转换为 numeric
并获得 sum
library(stringr)
sum(as.numeric(str_extract_all(test$value, "\d+(?=\shour)")[[1]]))
#[1] 3
查找后跟 space 和 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