如何在使用bind_rows()之前删除列表中的空数据框?

时间:2019-04-19 10:35:51

标签: r

我有一个混合了数据帧,小标题和空列表的列表。在应用bind_rows附加其余数据帧之前,如何删除小标题和空列表?

我尝试使用delete.NULLs函数,但出现错误:

  

错误:找不到函数“ delete.NULLs”

2 个答案:

答案 0 :(得分:4)

我们可以使用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 :(得分:1)

使用@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)]