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 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る