我有一个小名单。
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。
答案 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