Фильтровать вектор строк на основе соответствия строк
У меня есть следующий вектор:
X <- c("mama.log", "papa.log", "mimo.png", "mentor.log")
Как получить другой вектор, который содержит только элементы, начинающиеся с "m" и заканчивающиеся на ".log"?
Ответ 1
вы можете использовать grepl с регулярным выражением:
X[grepl("^m.*\\.log", X)]
Ответ 2
Попробуйте следующее:
grep("^m.*[.]log$", X, value = TRUE)
## [1] "mama.log" "mentor.log"
Вариантом этого является использование глоба, а не регулярное выражение:
grep(glob2rx("m*.log"), X, value = TRUE)
## [1] "mama.log" "mentor.log"
Ответ 3
Документация к пакету stringr гласит:
str_subset() является оберткой вокруг x[str_detect(x, pattern)] и эквивалентен grep(pattern, x, value = TRUE). str_which() является оберткой вокруг which(str_detect(x, pattern)) и эквивалентно grep(pattern, x).
Итак, в вашем случае более элегантный способ выполнить вашу задачу, используя tidyverse вместо базы R, заключается в следующем.