如何根据字符串匹配过滤R中的字符串向量

时间:2011-08-25 08:44:37

标签: r vector indexing slice

我在R中有以下向量:

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

如何检索另一个仅包含以“m”开头并以“.log”结尾的元素的向量?

4 个答案:

答案 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"