1

2 セットの変数間の相関行列があります。各 As と最大の相関を持つ変数 B を見つけたい

> B = data.frame('B1' = c(3,3,5), 'B2' = c(2,7,8))
> A = data.frame('A1' = c(1,2,3), 'A2' = c(4,2,6))
> corr_matrix = cor(A,B)
> corr_matrix

          B1        B2
A1 0.8660254 0.9332565
A2 0.8660254 0.1555428

走る

> temp = apply(corr_matrix,1,which.max)
> temp
A1 A2 
2  1
> names(B)[temp]
[1] "B2" "B1"

そして、必要なものの素晴らしいベクトルを取得します。これがキャッチです。私のマトリックスがこのように見える場合

corr_matrix

           B1 B2        B3
A1         NA NA        NA
A2  0.3986434 NA 0.2807630
A3 -0.3568664 NA 0.6037172
A4  0.1974342 NA 0.6827092

apply(corr_matrix,1,which.max)

$A1
integer(0)

$A2
B1 
1 

$A3
B3 
3 

$A4
B3 
3 

特に理解できない奇妙なネスト構造が得られます。誰かがこの構造とは何か、なぜ上記の例とは異なる結果になるのか説明してもらえますか?

吐き出したら嬉しいというか

A1 A2 A3 A4
NA  1  3  3

最後に、欲しい答え (NA,B1,B3,B3) が表示されますが、それをベクトル形式で取得するにはどうすればよいですか?

多くの NA + 適用スレッドが表示されますが、どれも私の目的では機能していないようです。これが私が認識していないものと重複している場合はお詫び申し上げます。

4

2 に答える 2

1

スヴェンの解決策は、一般的に進むべき道です。ただし、この場合、mode出力リストの を に変更することで回避できnumericます。

ll <- structure(list(A1 = integer(0), A2 = structure(1L, .Names = "B1"), 
      A3 = structure(3L, .Names = "B3"), A4 = structure(3L, .Names = "B3")), 
     .Names = c("A1", "A2", "A3", "A4"))

mode(ll) <- "numeric"
ll
# A1 A2 A3 A4 
# NA  1  3  3 
于 2013-07-17T08:35:16.737 に答える