从仅包含NA的列表中删除元素?

时间:2018-07-30 16:12:55

标签: r

我要删除此列表中仅包含NA的所有元素:

  List_data <- list("Green", "Yellow", c(NA,NA,NA), TRUE, 51.2)

4 个答案:

答案 0 :(得分:6)

如果您是说删除整个元素(并且不要留下空名称),请尝试:

Filter(function(a) any(!is.na(a)), List_data)

编辑:使用Onyambu对Negate(anyNA)的建议(谢谢!),

Filter(Negate(anyNA), List_data)

答案 1 :(得分:5)

EDIT2: 根据akrun的评论,这里可能也有帮助。

List_data[vapply(List_data, function(x) any(!is.na(x)), logical(1))]

编辑: 根据Onyambu的评论,这可能有助于删除其中包含NA的完整元素,这要感谢Onyambu的指导。

List_data[!sapply(List_data, function(x) all(is.na(x)))]


可以请您尝试以下操作:

lapply(List_data, function(x) x[!is.na(x)])

答案 2 :(得分:4)

对于purrr方法:

library(purrr)

List_data %>%
  map(discard, is.na) %>%
  compact()

请注意,您可以删除compact()并获得“两个”解决方案。

答案 3 :(得分:4)

您也可以这样做:

List_data[!sapply(List_data, function(x) all(is.na(x)))]

或@snoram指出:

 List_data[sapply(List_data, Negate(anyNA))]

也可以表示为:

 List_data[!sapply(List_data, anyNA)]