Как удалить пустые рамки данных в списке перед использованием bind_rows ()? - PullRequest
2 голосов
/ 19 апреля 2019

У меня есть список микс-фреймов, тиббл и пустой список. Как убрать тиббл и пустой список перед применением bind_rows для добавления остальных фреймов данных?

Я пытался использовать функцию delete.NULLs, но произошла ошибка:

Ошибка: не удалось найти функцию "delete.NULLs"

Ответы [ 2 ]

4 голосов
/ 19 апреля 2019

Мы можем использовать discard

library(purrr)
discard( lst1, ~is.vector(.x) || is.null(.x)|is_tibble(.x) )

РЕДАКТИРОВАТЬ: Из @ ArtemSokolov комментарии


или от base R

out <-  Filter(function(x) !(is.vector(x) | is.null(x) |is_tibble(x)), lst1)
out
#[[1]]
#  col1
#1    1
#2    2
#3    3

#[[2]]
#  A B
#1 1 2
#2 2 3
#3 3 4
#4 4 5
#5 5 6

Функция delete.NULLs не найдена в base R. Но его можно создать с помощью комбинации is.null и отрицания (!).

данные

lst1 <- list(data.frame(col1 = 1:3), NULL, tibble(col1 = 1:5, 
             col2 = 2:6), NA, data.frame(A = 1:5, B = 2:6))
1 голос
/ 19 апреля 2019

Использование данных @akrun:

lst1[unlist(lapply(lst1, function(x) !(is.null(x) | is_tibble(x))))]

Относительно вашего вопроса о NA:

lst1 <- list(data.frame(col1 = 1:3), NULL, tibble(col1 = 1:5, 
                                                  col2 = 2:6), data.frame(A = 1:5, B = 2:6), NA)

lst <-lst1[unlist(lapply(lst1, function(x) !(is.null(x) | is_tibble(x))))]

lst<-lst[!is.na(lst)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...