1

Rには2つのデータフレームのリストがあります(各リストのそれぞれのデータフレームは同じサイズです)。各リストのそれぞれのデータフレームを 1 行にまとめて追加することは可能ですか。

たとえば、私たちが持っていたと言います

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

次のようにすると、明らかにこれを 2 行に分けて実行できます。

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

しかし、おそらくlapplyを使用して、これを1行で行う簡単な方法はありますか?

ありがとう

4

3 に答える 3

8

名前を保持する方法は次のとおりです。

mapply(function(x, y) x + y, list1, list2, SIMPLIFY=FALSE, USE.NAMES=TRUE)
于 2012-08-31T13:14:19.637 に答える
2

これは、あなたの質問に非常に固有の解決策です。つまり、次のことを前提としています。

  1. 2 つのリストがあります
  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
于 2012-08-31T12:58:49.440 に答える
0

unlist理論的には、との組み合わせで実行できるはずですがrelist、文書化されているようには機能しないようです。

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 
于 2012-08-31T13:17:12.943 に答える