【问题标题】:Add respective dataframes in list together in R在R中将列表中的各个数据框一起添加
【发布时间】:2012-08-31 12:53:37
【问题描述】:

我在 R 中有 2 个数据框列表(每个列表中的相应数据框大小相同)。是否可以将每个列表中的相应数据帧添加到一行中。

例如说我们有

list1 <- list('a' = data.frame('x'=c(0,1),'y'=c(2,0)), 'b' = data.frame('x'=c(1,1),'y'=c(1,1)))
list2 <- list('a' = data.frame('x'=c(1,2),'y'=c(1,1)), 'b' = data.frame('x'=c(0,1),'y'=c(0,1)))

所以 list1 是:

$a
 x y
 0 2
 1 0

$b
 x y
 1 1
 1 1

而list2是:

$a
 x y
 1 1
 2 1

$b
 x y
 0 0
 1 1

最终的输出是:

$a
 x y
 1 3
 3 1

$b
 x y
 1 1
 2 2

显然可以通过以下方式分两行执行此操作:

listOutput <- list()
listOutput[['a']] <- list1[['a']] + list2[['a']]
listOutput[['b']] <- list1[['b']] + list2[['b']]

但是有没有一种简单的方法可以在一行中做到这一点,也许使用 lapply?

谢谢

【问题讨论】:

    标签: r list dataframe add


    【解决方案1】:

    这是一种保留名称的方法:

    mapply(function(x, y) x + y, list1, list2, SIMPLIFY=FALSE, USE.NAMES=TRUE)
    

    【讨论】:

      【解决方案2】:

      这是一个非常适合您的问题的解决方案。换句话说,它假设:

      1. 您有两个列表
      2. 每个列表都有相同的元素
      3. 元素可以转换为矩阵

      代码:

      lapply(1:2, function(i)list1[[i]] + list2[[i]])
      [[1]]
        x y
      1 1 3
      2 3 1
      
      [[2]]
        x y
      1 1 1
      2 2 2
      

      【讨论】:

      • 谢谢安德烈,但有没有办法在列表中保留数据框的名称? (在本例中为 a 和 b)
      【解决方案3】:

      理论上,您应该可以使用unlistrelist 的组合来做到这一点,但它似乎不像记录的那样工作:

      relist(unlist(list1)+unlist(list2),skeleton=list1)
      $a
         x    y <NA> <NA> 
         1    3    3    1 
      
      $b
         x    y <NA> <NA> 
         1    2    1    2 
      

      【讨论】:

        猜你喜欢
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 2015-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        相关资源
        最近更新 更多