No.11336 Rのプログラムについて  【かちょう】 2009/11/27(Fri) 21:44

久しぶりに書き込ませていただきます。

Rのプログラムについてですが,
A<-vector("list",40)
B<-vector("list",60)
として,A,Bの中に2×2の行列がそれぞれ40,60入っていたとします。
この2つを1つにまとめて一覧できる行列(もしくはデータフレーム)をつくるにはどうしたらいいでしょうか。

たとえばABそれぞれの1番目のベクトルが
1,2    5,6
3,4    7,8
ならば,作りたいのは

1,2,3,4,5,6,7,8


(と60行続く。ただしAは40まで)

という行列もしくはデータフレームです。
ご教示お願いいたします。

No.11337 Re: Rのプログラムについて  【青木繁伸】 2009/11/27(Fri) 22:16

テストデータの作成法についても参考になるかと。
やり方はいろいろあり,エレガントな方法からダサい方法まで。。以下のようにしてみました。まず,A, B それぞれを,4行からなる行列 A2, B2 に変換。どちらか短ければ,NA で補完する。そのあと,cbind して8列からなる行列 AB にまとめる。
 > set.seed(123)
> A <- lapply(1:40, function(i) matrix(sample(10, 4), 2))
> B <- lapply(1:60, function(i) matrix(sample(10, 4), 2))
> A2 <- t(sapply(A, function(m) as.vector(t(m))))
> B2 <- t(sapply(B, function(m) as.vector(t(m))))
> nA <- nrow(A2)
> nB <- nrow(B2)
> if (nA < nB) {
+ A2 <- rbind(A2, matrix(NA, nB-nA, ncol(A2)))
+ } else if (nA > nB) {
+ B2 <- rbind(B2, matrix(NA, nA-nB, ncol(A2)))
+ }
> AB <- cbind(A2, B2)
# 確認
> head(A, 3)
[[1]]
[,1] [,2]
[1,] 3 4
[2,] 8 7

[[2]]
[,1] [,2]
[1,] 10 5
[2,] 1 7

[[3]]
[,1] [,2]
[1,] 6 8
[2,] 5 4

> head(B, 3)
[[1]]
[,1] [,2]
[1,] 6 10
[2,] 4 3

[[2]]
[,1] [,2]
[1,] 4 6
[2,] 5 2

[[3]]
[,1] [,2]
[1,] 5 6
[2,] 3 2

> head(AB, 3)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 3 4 8 7 6 10 4 3
[2,] 10 5 1 7 4 6 5 2
[3,] 6 8 5 4 5 6 3 2
> tail(AB, 25)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[36,] 4 1 10 2 8 7 1 6
[37,] 9 2 3 1 7 2 5 1
[38,] 3 9 7 4 5 4 10 8
[39,] 4 1 3 9 8 3 1 6
[40,] 6 4 2 9 9 10 3 6
[41,] NA NA NA NA 9 2 3 5
[42,] NA NA NA NA 2 8 1 9
途中省略
[59,] NA NA NA NA 8 1 10 2
[60,] NA NA NA NA 3 9 1 7

No.11338 Re: Rのプログラムについて  【青木繁伸】 2009/11/27(Fri) 22:44

与えられた条件をフルに生かすと,以下のような簡単なプログラムも可能(ただし,一般性は全くない)
> AB <- matrix(NA, 60, 8)
> AB[1:40, c(1,3,2,4)] <- matrix(unlist(A), byrow=TRUE, ncol=4)
> AB[1:60, c(5,7,6,8)] <- matrix(unlist(B), byrow=TRUE, ncol=4)
> AB
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 3 4 8 7 6 10 4 3
[2,] 10 5 1 7 4 6 5 2
[3,] 6 8 5 4 5 6 3 2
途中省略
[59,] NA NA NA NA 8 1 10 2
[60,] NA NA NA NA 3 9 1 7

No.11341 Re: Rのプログラムについて  【かちょう】 2009/11/28(Sat) 10:24

大変親切なご説明ありがとうございます。今回のようなデータをうまくまとめられず困っていましたが,非常に助かりました。

これからも勉強させていただきます。
ありがとうございました。
今後ともよろしくお願いいたします。

● 「統計学関連なんでもあり」の過去ログ--- 043 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る