用属性提取相关矩阵的一个三角形

rmf*_*rmf 6 attributes r correlation

我有一个相等行和列的数据帧/矩阵.我想只提取上三角或下三角.

x<-data.frame(matrix(1:25,nrow=5))
colnames(x)<-LETTERS[1:5]
rownames(x)<-LETTERS[1:5]

x[upper.tri(x,diag=F)]
Run Code Online (Sandbox Code Playgroud)

从这个结果来看,不可能说出值来自列和行的组合.所以,我想在结果中有行和列属性.像这样的东西:

Col Row Val
B   A   6
C   A   11
C   B   12
...
Run Code Online (Sandbox Code Playgroud)

我需要为一个大的相关矩阵做这个.谢谢.

Sim*_*lon 5

我只是用which具有arr.ind = TRUE这样的:

ind <- which( upper.tri(x,diag=F) , arr.ind = TRUE )

data.frame( col = dimnames(x)[[2]][ind[,2]] ,
            row = dimnames(x)[[1]][ind[,1]] ,
            val = x[ ind ] )

   col row val
1    B   A   6
2    C   A  11
3    C   B  12
4    D   A  16
5    D   B  17
6    D   C  18
7    E   A  21
8    E   B  22
9    E   C  23
10   E   D  24
Run Code Online (Sandbox Code Playgroud)


Jam*_*gle 4

首先,为了让事情变得明确,我改变了

colnames(x) <- LETTERS[6:10]
Run Code Online (Sandbox Code Playgroud)

用于expand.grid获取像这样的行和列名称

rowCol <- expand.grid(rownames(x), colnames(x))
Run Code Online (Sandbox Code Playgroud)

要从此数据框中获取正确的行,请采取

labs <- rowCol[as.vector(upper.tri(x,diag=F)),]
df <- cbind(labs, x[upper.tri(x,diag=F)])
colnames(df) <- c("Row","Col","Val")
df[,c(2,1,3)]
##    Col Row Val
## 6    G   A   6
## 11   H   A  11
## ...
Run Code Online (Sandbox Code Playgroud)