Ответ 1
вы можете использовать grepl
с регулярным выражением:
X[grepl("^m.*\\.log", X)]
У меня есть следующий вектор:
X <- c("mama.log", "papa.log", "mimo.png", "mentor.log")
Как получить другой вектор, который содержит только элементы, начинающиеся с "m" и заканчивающиеся на ".log"?
вы можете использовать grepl
с регулярным выражением:
X[grepl("^m.*\\.log", X)]
Попробуйте следующее:
grep("^m.*[.]log$", X, value = TRUE)
## [1] "mama.log" "mentor.log"
Вариантом этого является использование глоба, а не регулярное выражение:
grep(glob2rx("m*.log"), X, value = TRUE)
## [1] "mama.log" "mentor.log"
Документация к пакету 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"
Использование труб...
library(tidyverse)
c("mama.log", "papa.log", "mimo.png", "mentor.log") %>%
.[grepl("^m.*\\.log$", .)]
[1] "mama.log" "mentor.log"