6

等しい行と列のデータフレーム/マトリックスがあります。上三角または下三角のみを抽出したい。

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
...

大きな相関行列に対してこれを行う必要があります。ありがとう。

4

4 に答える 4

4

まず、物事を明確にするために、私は変更します

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
## ...
于 2013-08-08T13:58:42.710 に答える
1

...これは解決策かもしれません

nam <-apply(ind, 2, function(y, x) rownames(x)[c(y)], x=x)   
cbind(nam, x[upper.tri(x,diag=F)])

h番目

于 2013-08-08T13:50:06.113 に答える