Подтвердить что ты не робот

Фильтровать вектор строк на основе соответствия строк

У меня есть следующий вектор:

X <- c("mama.log", "papa.log", "mimo.png", "mentor.log")

Как получить другой вектор, который содержит только элементы, начинающиеся с "m" и заканчивающиеся на ".log"?

4b9b3361

Ответ 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, заключается в следующем.

library(tidyverse)

c("mama.log", "papa.log", "mimo.png", "mentor.log") %>% 
   str_subset(pattern = "^m.*\\.log")

который производит вывод:

[1] "mama.log"   "mentor.log"

Ответ 4

Использование труб...

library(tidyverse)

c("mama.log", "papa.log", "mimo.png", "mentor.log") %>%
 .[grepl("^m.*\\.log$", .)]
[1] "mama.log"   "mentor.log"