【问题标题】:How to reduce (subset) list of lists?如何减少(子集)列表列表?
【发布时间】:2021-02-04 11:42:38
【问题描述】:

我有一个这样的列表:

list.ex <- list('a' = c(10,11), 'b' = c(9,10,11), 'c' = c(8,9,10,11), 'd' = c(7,8,9,10,11), 'e' = c(6,7,8,9,10,11), 'f' = c(6,8,9,10,11))

我想检查并删除属于另一个列表子集的那些列表(按确切顺序)。 例如在这种情况下,我想减少list.ex,这样我们就剩下list.ex[[e]]list.ex[[f]]

【问题讨论】:

    标签: r list subset


    【解决方案1】:

    is_subsequence 确定a 是否是b 的子集,顺序相同。

    library(tidyverse)
    
    is_subsequence <- function(a, b) {
      str_detect(
        paste0(b, collapse = ","),
        fixed(paste0(a, collapse = ","))
      )
    }
    

    matches_other 接受一个向量并确定它是否匹配list.ex 中的多个向量

    matches_other <- function(l) {
      map_lgl(
        list.ex,
        ~is_subsequence(l, .)
      ) %>%
      sum() %>%
      `>`(1)
    }
    

    discard 用于删除匹配项。

    list.ex %>%
      discard(matches_other)
    #> $e
    #> [1]  6  7  8  9 10 11
    #> 
    #> $f
    #> [1]  6  8  9 10 11
    

    【讨论】:

      猜你喜欢
      • 2012-12-21
      • 2012-08-28
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多