【发布时间】:2019-12-02 09:39:58
【问题描述】:
早上好,
我正在寻找一种方法,以编程方式将两个不同的数据帧(具有相关系数)转换为一个对称的命名矩阵,其中一个数据帧的值位于上三角,另一个数据帧的数据位于下三角。
取两个相关表:
t1<-structure(list(var1 = c("SE", "SE", "CN", "GN", "CN", "CN"),
var2 = c("VN", "GN", "SE", "VN", "VN", "GN"), cor = c("-0.42***",
"0.16***", "-0.21***", "0.1**", "0.35***", "0.07*")), class = "data.frame", row.names = c(NA,
-6L))
t2<-structure(list(var1 = c("SE", "SE", "SE", "SE", "VN", "VN", "VN",
"GN", "GN", "CN"), var2 = c("VN", "GN", "CN", "IS", "GN", "CN",
"IS", "CN", "IS", "IS"), cor = c("-0.41***", "0.14***", "-0.02",
"0.28***", "0.1**", "0.28***", "-0.02", "0.03", "-0.06†", "0.53***"
)), class = "data.frame", row.names = c(NA, -10L))
t1是X=4变量的关联表:
var1 var2 cor
1 SE VN -0.42***
2 SE GN 0.16***
3 CN SE -0.21***
4 GN VN 0.1**
5 CN VN 0.35***
6 CN GN 0.07*
t2 是带有X + 1 变量的关联表(与X 中的名称相同+1 个)
var1 var2 cor
1 SE VN -0.41***
2 SE GN 0.14***
3 SE CN -0.02
4 SE IS 0.28***
5 VN GN 0.1**
6 VN CN 0.28***
7 VN IS -0.02
8 GN CN 0.03
9 GN IS -0.06†
10 CN IS 0.53***
我想:
- 根据
t2数据制作对称矩阵 - 将上面的三角形替换为对应的
t1数据 - 删除最后一列(多余的)
我知道我可以手动完成,但我有许多数据集需要处理不同大小的矩阵(和名称)以及应该报告的上述表格。
我的手动解决方案如下:
mat <- matrix(NA, 5,4, dimnames = list(c("SE", "VN", "GN", "CN", "IS"),
c("SE", "VN", "GN", "CN")))
mat[lower.tri(mat)] <- t2$cor
mat[upper.tri(mat)] <- t1$cor
diag(mat) <- "-"
mat
SE VN GN CN
SE "-" "-0.42***" "0.16***" "0.1**"
VN "-0.41***" "-" "-0.21***" "0.35***"
GN "0.14***" "0.1**" "-" "0.07*"
CN "-0.02" "0.28***" "0.03" "-"
IS "0.28***" "-0.02" "-0.06†" "0.53***"
【问题讨论】:
标签: r matrix correlation