【问题标题】:combine list elements based on element names根据元素名称组合列表元素
【发布时间】:2013-09-17 00:50:40
【问题描述】:

如何按元素名称组合这个向量列表?

L1 <- list(F01=c(1,2,3,4),F02=c(10,20,30),F01=c(5,6,7,8,9),F02=c(40,50))

所以得到:

results <- list(F01=c(1,2,3,4,5,6,7,8),F02=c(10,20,30,40,50))

我尝试应用以下解决方案 merge lists by elements names,但我不知道如何使其适应我的情况。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用来自purrrmap 函数实现相同的结果

    map(unique(names(L1)), ~ flatten_dbl(L1[names(L1) == .x])) %>%
      set_names(unique(names(L1)))
    

    第一行通过合并具有匹配名称的元素来转换数据,而最后一行相应地重命名新列表。

    【讨论】:

      【解决方案2】:
      sapply(unique(names(L1)), function(x) unname(unlist(L1[names(L1)==x])), simplify=FALSE)
      $F01
      [1] 1 2 3 4 5 6 7 8 9
      
      $F02
      [1] 10 20 30 40 50
      

      【讨论】:

      • 太好了,你的救命稻草。如果我可以问的话,在这里匿名的目的是什么?谢谢。
      • @Chargaff,没有unname,每个向量都有一个name属性,继承自列表元素名称。试试看,你会看到的。此外,最好在上面添加simplify=FALSE,以避免获取矩阵而不是列表。我现在正在编辑答案。
      • 您可以在unlist 中添加选项use.names = F 而不是unname。但是这两种方法都删除了向量的原始名称...
      猜你喜欢
      • 2023-01-28
      • 1970-01-01
      • 2013-09-03
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      相关资源
      最近更新 更多