Я бы использовал apply
с stringr::str_detect
для этого:
lc_notes <- c("collected 1.667 man-hr total. mostly cloudy, windy with gusts >20 mph.",
"collected 1.667 man-hr total. mostly cloudy, windy with gusts > 20 mph.",
"collected 1.667 man-hr total. mostly cloudy, windy with gusts of 20 mph.")
mph_words<-c(">10", "> 10", ">20", "> 20")
sapply(lc_notes, function(x) any(str_detect(x, mph_words)))
collected 1.667 man-hr total. mostly cloudy, windy with gusts >20 mph.
TRUE
collected 1.667 man-hr total. mostly cloudy, windy with gusts > 20 mph.
TRUE
collected 1.667 man-hr total. mostly cloudy, windy with gusts of 20 mph.
FALSE
sapply
будет проходить через каждый элемент вектора lc_notes
, применяя тест к каждому. Затем, используя any
, мы упрощаем вектор до единого логического значения.
Если вам нужны номера строк, а не логический вектор, используйте функцию which
:
unname(which(sapply(lc_notes, function(x) any(str_detect(x, mph_words)))))
[1] 1 2
Я использовал unname
здесь, чтобы подчеркнуть, что вектор, который он возвращает, является индексом элементов в lc_notes
, которые соответствуют любому из шаблонов регулярных выражений. Вы также можете сделать обратное и вызвать names
, чтобы получить текст строки:
names(which(sapply(lc_notes, function(x) any(str_detect(x, mph_words)))))
[1] "collected 1.667 man-hr total. mostly cloudy, windy with gusts >20 mph."
[2] "collected 1.667 man-hr total. mostly cloudy, windy with gusts > 20 mph."
Если вы хотите более простое регулярное выражение, которое соответствует пробелам или без пробелов, используйте дополнительный квантификатор ?
для пробела:
mph_words<-c("> ?10", "> ?20")