gpt4 book ai didi

r - 如何在R中的相关矩阵中提取相邻变量之间的值?

转载 作者:行者123 更新时间:2023-12-03 15:12:47 24 4
gpt4 key购买 nike

我有巨大的相关矩阵,但以下只是一个例子:

    set.seed(1234)

corrmat <- matrix(round (rnorm (36, 0, 0.3),2), ncol=6)
rownames (corrmat) <- colnames (corrmat) <- c("A", "b1", "b2", "C", "L", "ctt")
diag(corrmat) <- NA
corrmat[upper.tri (corrmat)] <- NA
A b1 b2 C L ctt
A NA NA NA NA NA NA
b1 0.08 NA NA NA NA NA
b2 0.33 -0.17 NA NA NA NA
C -0.70 -0.27 -0.03 NA NA NA
L 0.13 -0.14 -0.15 -0.13 NA NA
ctt 0.15 -0.30 -0.27 0.14 -0.28 NA

> melt(corrmat)

X1 X2 value
1 A A NA
2 b1 A 0.08
3 b2 A 0.33
4 C A -0.70
5 L A 0.13
6 ctt A 0.15
7 A b1 NA
8 b1 b1 NA
9 b2 b1 -0.17
10 C b1 -0.27
11 L b1 -0.14
12 ctt b1 -0.30
13 A b2 NA
14 b1 b2 NA
15 b2 b2 NA
16 C b2 -0.03
17 L b2 -0.15
18 ctt b2 -0.27
19 A C NA
20 b1 C NA
21 b2 C NA
22 C C NA
23 L C -0.13
24 ctt C 0.14
25 A L NA
26 b1 L NA
27 b2 L NA
28 C L NA
29 L L NA
30 ctt L -0.28
31 A ctt NA
32 b1 ctt NA
33 b2 ctt NA
34 C ctt NA
35 L ctt NA
36 ctt ctt NA

我正在寻找的是仅相邻之间的相关值 - 意味着 A-b1、b1-b2、b2-C、C-L、L-ctt(按列中的顺序)之间的相关值。我需要删除其他值和 NA。因此预期将是:
        X1   X2  value
2 b1 A 0.08
9 b2 b1 -0.17
16 C b2 -0.03
23 L C -0.13
30 ctt L -0.28

因此它们位于: A-b1-b2-C-L-ctt命令。

有没有简单的过滤方法?

最佳答案

这是使用经常被忽视的函数的一种方法 row()col()

> corrmat ## my version as there was no set.seed
A b1 b2 C L ctt
A NA NA NA NA NA NA
b1 0.03 NA NA NA NA NA
b2 -0.41 -0.02 NA NA NA NA
C 0.11 0.61 -0.18 NA NA NA
L -0.28 -0.28 0.39 0.01 NA NA
ctt -0.21 -0.41 -0.55 0.34 -0.13 NA

> corrmat[row(corrmat) == col(corrmat) + 1]
[1] 0.03 -0.02 -0.18 0.01 -0.13

请注意,我们正在索引矩阵 corrmat作为这里的向量,括号中的位表示返回元素,其中每个元素的行索引与每个元素的列索引相匹配加 1。使用 -1会给你超对角线(即对角线上方)。

把它们放在一起:
out <- data.frame(X1 = rownames(corrmat)[-1],
X2 = head(colnames(corrmat), -1),
Value = corrmat[row(corrmat) == col(corrmat) + 1])

> out
X1 X2 Value
1 b1 A 0.03
2 b2 b1 -0.02
3 C b2 -0.18
4 L C 0.01
5 ctt L -0.13

关于r - 如何在R中的相关矩阵中提取相邻变量之间的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com