簡體   English   中英

R從列表列表中刪除完整的NA列表

[英]R remove list full of NA from a list of lists

我有一個列表列表,可能包含NA值。 如何刪除充滿NA值的列表,請記住,如果列表中存在非NA值,則不應刪除這些值和NA值?

輸入示例:

myList <- list()
myList[[1]] <- c(1,2,3)
myList[[2]] <- c(4,5)
myList[[3]] <- c(NA,NA,NA,NA,NA)
myList[[4]] <- c(NA, 6, 7, NA)
myList[[5]] <- NA

所需的輸出是:

[[1]]
[1] 1 2 3

[[2]]
[1] 4 5

[[3]]
[1] NA  6  7 NA

到目前為止,我能夠做到:

test <- lapply(myList, function(x) x[!all(is.na(x))])

得到輸出:

[[1]]
[1] 1 2 3

[[2]]
[1] 4 5

[[3]]
logical(0)

[[4]]
[1] NA  6  7 NA

[[5]]
logical(0)

另一個選擇是discard

library(purrr)
discard(myList, ~ all(is.na(.x)))
#[1]]
#[1] 1 2 3

#[[2]]
#[1] 4 5

#[[3]]
#[1] NA  6  7 NA

Filter救援:

Filter(function(x) !all(is.na(x)), myList)
#[[1]]
#[1] 1 2 3
#
#[[2]]
#[1] 4 5
#
#[[3]]
#[1] NA  6  7 NA

您可以使用至少一個非NA值對列表元素進行子集化:

> myList[sapply(myList, function(x) sum(!is.na(x))) > 0]
[[1]]
[1] 1 2 3

[[2]]
[1] 4 5

[[3]]
[1] NA  6  7 NA

您可以通過為其分配NULL來“殺死”元素。

myList[sapply(myList,function(x) all(is.na(x)))] <- NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM