如何基于字符串过滤小标题列表,并使用字符串而不是特定的行获得整个小标题?

时间:2019-07-04 04:56:19

标签: r

我有一个小名单。

library(tidyverse)
mylist <- list(tibble(x = 1:5),tibble(x = 6:10),tibble(x = 11:15))

我想根据特定的值对它们进行过滤,并获得一个包含所有小标题的列表,其中包含该值。

我已经尝试过lapply和map了,但是它们也过滤了小标题,而不仅仅是列表。

b <- map(mylist, ~filter(.x,  x==3|x==6))

c <- lapply(mylist, function(df){
  df %>%
    filter(x == 3|x==6)
})

这两个方法不起作用,因为它们仅返回3和6,而不是整个小标题(1:5和6:10)。我也想输出列表以排除空小滴, 因此最终列表的长度为2。

1 个答案:

答案 0 :(得分:1)

我们可能需要any才能提取list个元素

mylist[sapply(mylist, function(x) any(c(3, 6) %in% x$x))]

或与Filter

Filter(function(y) any(c(3,6) %in% y$x), mylist)

或使用tidyverse

library(tidyverse)
keep(mylist, ~ any(c(3, 6) %in% .x$x))
#[[1]]
# A tibble: 5 x 1
#      x
#  <int>
#1     1
#2     2
#3     3
#4     4
#5     5

#[[2]]
# A tibble: 5 x 1
#      x
#  <int>
#1     6
#2     7
#3     8
#4     9
#5    10