【问题标题】:how to filter a list in R如何过滤R中的列表
【发布时间】:2026-01-01 12:50:01
【问题描述】:

我有一个想要过滤的列表。

[[100]][[1]]$total
[1] 7


[[100]][[2]]
[1] 7

[[100]][[3]]
[1] 25082.66

这是我从脚本中得到的输出,我正在尝试过滤此列表中总计 = 7 的所有元素。我总共有 100 个元素。

我的列表被标记为排序

 A<-(list.filter(sorts,total>6)) 

我想要一个仅包含总数为 7 的元素的列表

【问题讨论】:

    标签: r list function loops


    【解决方案1】:

    我们可以从每个列表中提取"total" 元素,并只选择其中包含 7 的那些元素。

    lst[sapply(lst, "[[", "total") == 7]
    
    #[[1]]
    #[[1]]$total
    #[1] 7
    
    #[[1]][[2]]
    #[1] 2
    
    #[[1]][[3]]
    #[1] 2
    
    
    #[[2]]
    #[[2]]$total
    #[1] 7
    
    #[[2]][[2]]
    #[1] 2
    
    #[[2]][[3]]
    #[1] 2
    

    或者我们也可以使用Filter

    Filter(function(x) x[["total"]] == 7, lst)
    

    使用purrr我们可以使用keep/discard

    library(purrr)
    keep(lst, ~.[["total"]] == 7)
    
    discard(lst, ~.[["total"]] != 7)
    

    map_lgl

    lst[map_lgl(lst, ~.[["total"]] == 7)]
    

    数据

    假设您的列表名为 lst,如下所示

    lst <- list(list(total = 100, 1, 2), list(total = 7, 2, 2), 
            list(total = 7, 2, 2), list(total = 71, 2, 2))
    

    【讨论】:

      【解决方案2】:

      我们可以使用pluckmap

      keep(lst, map(lst, pluck, "total") == 7)
      #[[1]]
      #[[1]]$total
      #[1] 7
      
      #[[1]][[2]]
      #[1] 2
      
      #[[1]][[3]]
      #[1] 2
      
      
      #[[2]]
      #[[2]]$total
      #[1] 7
      
      #[[2]][[2]]
      #[1] 2
      
      #[[2]][[3]]
      #[1] 2
      

      数据

      lst <- list(list(total = 100, 1, 2), list(total = 7, 2, 2), 
              list(total = 7, 2, 2), list(total = 71, 2, 2))
      

      【讨论】: