Если предположить, что каждая строка имеет не более одного совпадающего члена, то мы можем попытаться использовать sapply
вместе с sub
:
input <- c("collected 1 hr total. wind >15 mph.",
"collected 4 hr total. wind ~15 mph.",
"collected 10 hr total. gusts 5-10 mph.",
"collected 1 hr total. breeze at 1mph,",
"collected 2 hrs.")
matches <- sapply(input, function(x) {
ifelse(grepl("[>~0-9-]+\\s*mph", x),
sub(".*?([>~0-9-]+\\s*mph).*", "\\1", x),
"")})
names(matches) <- c(1:length(matches))
matches
1 2 3 4 5
">15 mph" "~15 mph" "5-10 mph" "1mph" ""