我要删除此列表中仅包含NA的所有元素:
List_data <- list("Green", "Yellow", c(NA,NA,NA), TRUE, 51.2)
答案 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)]