【问题标题】:Merge list elements of one single list by name in R在R中按名称合并一个列表的列表元素
【发布时间】:2021-11-29 04:29:25
【问题描述】:

我有一个包含大量元素的列表(最后应该是一个反向索引)。

  • 所有元素都是长度不同的数值向量。
  • 一个元素的名称出现多次
> par.list
$NAMEA
[1]  1  2  3  4  5  7  8  9 10

$NAMEB
[1] 6

$NAMEB
[1] 11 12 13 16 17

$NAMEA
[1] 14 15 18 19 20

我寻找的是一种高效的方式,我得到了

> merged.list
$NAMEA
[1]  1  2  3  4  5  7  8  9 10 14 15 18 19 20

$NAMEB
[1] 6 11 12 13 16 17

我确信有一种简单的方法可以做到这一点,但我只是碰巧在这里找不到合适的线程,所以我将不胜感激!

【问题讨论】:

    标签: r list merge


    【解决方案1】:

    我们可以将stack 命名为list 到一个两列data.frame 和split

    with(stack(par.list), split(values, ind))
    

    -输出

    $NAMEA
     [1]  1  2  3  4  5  7  8  9 10 14 15 18 19 20
    
    $NAMEB
    [1]  6 11 12 13 16 17
    

    数据

    par.list <- list(NAMEA = c(1, 2, 3, 4, 5, 7, 8, 9, 10), NAMEB = 6, NAMEB = c(11L, 
    12L, 13L, 16L, 17L), NAMEA = c(14L, 15L, 18L, 19L, 20L))
    

    【讨论】:

      【解决方案2】:

      lapply 的另一个选项 -

      uq_names <- unique(names(par.list))
      
      setNames(lapply(uq_names, function(x) 
              unlist(par.list[names(par.list) == x], use.names = FALSE)), uq_names)
      
      #$NAMEA
      # [1]  1  2  3  4  5  7  8  9 10 14 15 18 19 20
      
      #$NAMEB
      #[1]  6 11 12 13 16 17
      

      【讨论】:

        猜你喜欢
        • 2014-06-23
        • 2014-06-08
        • 2013-09-03
        • 1970-01-01
        • 1970-01-01
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多