我有一个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
Obs .:数字可以在任何字符串部分找到。但是hour
或hours
之前的所有内容。
答案 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