在R中一起添加列表中的各个数据帧

时间:2012-08-31 12:53:38

标签: r list dataframe add

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

e.g。说我们有

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?

由于

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:2)

这是一个非常针对您的问题的解决方案。换句话说,它假定:

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

    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
    

答案 2 :(得分:0)

从理论上讲,您应该可以使用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