grep向量列表的子集?

时间:2019-06-16 14:49:22

标签: r string lapply grepl

我有一个向量列表,我想创建一个新列表,该列表包含任何包含字母“ a”的值,但保持内部结构。

l = list ( g1 = c('a','b','ca') , 
            g2 = c('a','b') )
lapply(l, function(x)  grep('a',x)  )

lapply on提供索引号,但我希望它返回的是值。 最终结果应该是一个列表,其中向量g1包含a和ca,而g2仅包含a。

谢谢!

3 个答案:

答案 0 :(得分:2)

添加value = TRUE

lapply(l, function(x)  grep('a', x, value = TRUE))
# $g1
# [1] "a"  "ca"
# 
# $g2
# [1] "a"

答案 1 :(得分:1)

或者,您可以执行以下操作:

lapply(l, function(x)  x[grepl("a", x)])

$g1
[1] "a"  "ca"

$g2
[1] "a"

答案 2 :(得分:0)

如果您想尝试使用tidyverse,可以使用以下两种方法。

library(tidyverse)
map(l, ~grep('a', .x, value=T))
map(l, ~str_subset(.x, 'a')) # str_subset from stringr package is a wrapper for grep shown above.