从R中的嵌套列表中删除空值



我有一个嵌套的数据帧列表。在这些数据框架中,我有NA变量(现在向量?(。我想删除这些元素。

编辑:实际上我有空而不是na。

df.ls <- list(list(id = NULL, x = 3, works = NULL),
                 list(id = 2, x = 4, works = NULL),
              NULL)

我尝试了此代码,但不知道该如何使用该级别。

df.ls[sapply(df.ls, is.null)] <- NULL

对于NULL值,我们可以做

l1 <- lapply(df.ls, function(x) x[lengths(x) > 0])

对于NA S,我们可以做

l1 <- lapply(df.ls, function(x) x[!is.na(x)])
l1
#[[1]]
#[[1]]$x
#[1] 3

#[[2]]
#[[2]]$id
#[1] 2
#[[2]]$x
#[1] 4

#[[3]]
#list()

如果要删除空列表,则可以执行

l1[lengths(l1) >  0]

我不确定您要做什么,因为您说您有一个data.frames列表。

假设您有一个data.frames的列表,又包含长度> 1的向量,并且要删除所有"仅"仅" NAS的列。

df.ls <- list(data.frame(id = c(NA,NA,NA),
                         x = c(NA,3,5),
                         works = c(4,5,NA)),
              data.frame(id = c("a","b","c"),
                         x = c(NA,3,5),
                         works = c(NA,NA,NA)),
              data.frame(id = c("e","d",NA),
                         x = c(NA,3,5),
                         works = c(4,5,NA)))

>   [[1]]
      id  x works
    1 NA NA     4
    2 NA  3     5
    3 NA  5    NA
    [[2]]
      id  x works
    1  a NA    NA
    2  b  3    NA
    3  c  5    NA
    [[3]]
        id  x works
    1    e NA     4
    2    d  3     5
    3 <NA>  5    NA

那么这种方法将起作用:

    library(dplyr)
    library(purrr)
    non_empty_col <- function(x) {
        sum(is.na(x)) != length(x)
    }
    map(df.ls, ~ .x %>% select_if(non_empty_col))

返回您的data.frames列表。

[[1]]
   x works
1 NA     4
2  3     5
3  5    NA
[[2]]
  id  x
1  a NA
2  b  3
3  c  5
[[3]]
    id  x works
1    e NA     4
2    d  3     5
3 <NA>  5    NA

但是,如果您希望您的列表在每个数据中仅具有完整的案例。帧(无NAS行(,则以下代码将起作用。

library(dplyr)
map(df.ls, ~ .x[complete.cases(.x), ])

在我的示例数据的情况下,让您仅使用数据的第2行。

删除NULL

discard(map(df.ls, ~ discard(.x, is.null)), is.null)
#[[1]]
#[[1]]$x
#[1] 3

#[[2]]
#[[2]]$id
#[1] 2
#[[2]]$x
#[1] 4

或用Filteris.null

base R
Filter(Negate(is.null), lapply(df.ls, function(x) Filter(Negate(is.null), x)))

OP更新之前的早期版本

library(purrr)
map(df.ls, ~ .x[!is.na(.x)])
#[[1]]
#[[1]]$x
#[1] 3

#[[2]]
#[[2]]$id
#[1] 2
#[[2]]$x
#[1] 4

#[[3]]
#list()

相关内容

  • 没有找到相关文章