Как отфильтровать список элементов на основе строки и получить весь элемент со строкой, а не с конкретной строкой? - PullRequest
1 голос
/ 04 июля 2019

У меня есть список тиблей.

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

Я хочу отфильтровать их по определенным значениям и получить список с целыми тибблами, где присутствует это значение.

IЯ уже попробовал 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 Ответ

1 голос
/ 04 июля 2019

Нам может понадобиться 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...