我有相等的行和列的数据框/矩阵。我只想提取上三角形或下三角形。

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

x[upper.tri(x,diag=F)]

根据此结果,无法说出该值来自列和行的组合。因此,我想在结果中包含行和列属性。像这样的东西:
Col Row Val
B   A   6
C   A   11
C   B   12
...

对于大型相​​关矩阵,我需要这样做。
谢谢。

最佳答案

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

colnames(x) <- LETTERS[6:10]

使用expand.grid可以得到这样的行和列名称
rowCol <- expand.grid(rownames(x), colnames(x))

要从此数据框中获取正确的行,请
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
## ...

关于r - 提取具有属性的相关矩阵的一个三角形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18127476/

10-12 06:35