将矩阵的上三角部分转换为 3 列长格式

Agr*_*nee 5 r matrix

我想将矩阵转换为 R 中的三个定义的列。这是一个例子:

输入

     col1  col2  col3
row1  1     2     3 
row2  2     3     4
row3  3     4     5
Run Code Online (Sandbox Code Playgroud)

输出:

row1 clo1 1
row1 col2 2
row1 col3 3
row2 col2 3
row2 col3 4
row3 col3 5
Run Code Online (Sandbox Code Playgroud)

李哲源*_*李哲源 7

假设X是你的矩阵,我们可以这样做:

ind <- which(upper.tri(X, diag = TRUE), arr.ind = TRUE)
cbind(ind, X[ind])
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您可能希望使用暗淡的名称。在这种情况下,我们必须将结果排列在一个数据框中,因为前两列是字符,而第三列是数字。

ind <- which(upper.tri(X, diag = TRUE), arr.ind = TRUE)
nn <- dimnames(X)
data.frame(row = nn[[1]][ind[, 1]],
           col = nn[[2]][ind[, 2]],
           val = X[ind])
Run Code Online (Sandbox Code Playgroud)