我在R中有以下向量:
X <- c("mama.log", "papa.log", "mimo.png", "mentor.log")
如何检索另一个仅包含以“m”开头并以“.log”结尾的元素的向量?
答案 0 :(得分:53)
您可以将grepl
与正则表达式一起使用:
X[grepl("^m.*\\.log", X)]
答案 1 :(得分:23)
试试这个:
grep("^m.*[.]log$", X, value = TRUE)
## [1] "mama.log" "mentor.log"
这种变体是使用glob而不是正则表达式:
grep(glob2rx("m*.log"), X, value = TRUE)
## [1] "mama.log" "mentor.log"
答案 2 :(得分:4)
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"
答案 3 :(得分:1)
使用管道......
library(tidyverse)
c("mama.log", "papa.log", "mimo.png", "mentor.log") %>%
.[grepl("^m.*\\.log$", .)]
[1] "mama.log" "mentor.log"