我有两组变量之间的相关矩阵。 我想找到与每个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 +申请线程,但它们似乎都不适用于我的目的所以我很抱歉,如果这是我不知道的重复。
答案 0 :(得分:3)
相关矩阵:
corr_matrix <- as.matrix(read.table(text = "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", header = TRUE, row.names = 1))
您可以定义一个函数来处理所有值为NA
的情况:
temp <- apply(corr_matrix,1, function(x) if (all(is.na(x))) NA else which.max(x))
temp
# A1 A2 A3 A4
# NA 1 3 3
names(B)[temp]
# [1] NA "B1" "B3" "B3"
答案 1 :(得分:1)
Sven的解决方案是一般的方法。但是对于这种情况,您可以将输出列表的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