R:如何从列表中按值或类型删除元素

时间:2019-01-01 20:43:51

标签: r list loops na

我有一个包含列表和NA的列表。我想过滤掉NA,但是我不知道NA的确切名称或位置。

我在Google上搜索了很多,但是只发现了如何通过名称或索引来删除元素,但这不是我想要的。

以下是我的列表的示例:

example <- list(list(1,2,3), list(2,3,4), NA, list(2,3,4))

我的输出看起来像这样:

Name      Type        Value
example   list[[4]]   List of length 4
  [[1]]   list[[3]]   List of length 3
  [[2]]   list[[3]]   List of length 3
  [[3]]   logical     NA               <-I'd like to remove this row
  [[4]]   list[[3]]   List of length 3

我想编写一个循环,如果值是“ NA”或类型是“逻辑”,则从列表中删除一个元素。预先感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您可以使用which函数查找NA元素的索引,然后按索引将其删除:

example[-which(is.na(example))]

答案 1 :(得分:0)

这取决于您的数据结构。对于您的示例,以下内容将起作用:

example[!is.na(example) & !is.logical(example)]

如果子列表可以包含您也要删除的NA,则会变得更加复杂。

答案 2 :(得分:0)

这是一种从R列表中删除NA值的简单方法

example <- example[!is.na(example)]