【问题标题】:Deleting elements that appear only once in a list of vectors in R删除仅在 R 中的向量列表中出现一次的元素
【发布时间】:2019-12-14 13:28:06
【问题描述】:

我有一个包含 3 个向量的列表,XYZ。我想知道如何删除在所有 3 个向量中只出现一次的元素(此处为 ChandlerATrus.Hsu)?

d = list(X = c(Bit.KnoA = 4, Bit.KnoB = 1, Bit.KnoC = 2, ChandlerA = 3, Ellis.etal =4, 
               Mubarak=5, SheenA=6,  Shin.Ellis=7 , Sun = 8, Trus.Hsu=3 ), 

         Y = c(Bit.KnoA = 6, Bit.KnoB = 3, Bit.KnoC = 4, Ellis.etal =1, Mubarak=2, 
              SheenA=1,  Shin.Ellis=2 , Sun = 1),

         Z = c(Bit.KnoB = 2) )

【问题讨论】:

    标签: r list function loops lapply


    【解决方案1】:

    您也可以使用duplicated,因为您只对孤立值感兴趣:

    nms <- unlist(lapply(d, names))
    keep <- nms[duplicated(nms)]
    lapply(d, function(x) x[names(x) %in% keep] )
    
    #$X
    #  Bit.KnoA   Bit.KnoB   Bit.KnoC Ellis.etal    Mubarak     SheenA Shin.Ellis        Sun 
    #         4          1          2          4          5          6          7          8 
    #
    #$Y
    #  Bit.KnoA   Bit.KnoB   Bit.KnoC Ellis.etal    Mubarak     SheenA Shin.Ellis        Sun 
    #         6          3          4          1          2          1          2          1 
    #
    #$Z
    #Bit.KnoB 
    #       2 
    

    【讨论】:

      【解决方案2】:

      我们可以创建d 的副本,删除它的名称,这样当我们unlist 时,列表名称的名称不会附加到向量中。计算列表中每个名称的出现次数,并从仅出现一次的人中选择names,并将其从原始列表中删除(d)。

      d1 <- d
      names(d1) <- NULL
      vals <- table(names(unlist(d1)))
      delete_names <- names(vals[vals == 1])
      lapply(d, function(x) x[setdiff(names(x), delete_names)])
      
      #$X
      #  Bit.KnoA   Bit.KnoB   Bit.KnoC Ellis.etal    Mubarak     SheenA Shin.Ellis        Sun 
      #         4          1          2          4          5          6          7          8 
      
      #$Y
      #  Bit.KnoA   Bit.KnoB   Bit.KnoC Ellis.etal    Mubarak     SheenA Shin.Ellis        Sun 
      #         6          3          4          1          2          1          2          1 
      
      #$Z
      #Bit.KnoB 
      #       2 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-09
        相关资源
        最近更新 更多