假设我有一个如下所示的矩阵,对角线上方或下方的值相同。换句话说,[,1] x [2,] 和 [,2] x [1,] 在矩阵中都是 2。
> m = cbind(c(1,2,3),c(2,4,5),c(3,5,6))
> m
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 5
[3,] 3 5 6
然后我还有 1、2 和 3 的真实姓名。
>Real_name
A B C # A represents 1, B represents 2, and C represents 3.
如果我想将矩阵转换为包含每对对应真实姓名的 3 列,并且该对必须是唯一的,A x B 与 B x A 相同,所以我们只保留 A x B。我如何使用 R 实现它?
A A 1
A B 2
A C 3
B B 4
B C 5
C C 6
最佳答案
下面很简单:
m <- cbind(c(1,2,3), c(2,4,5), c(3,5,6))
## read `?lower.tri` and try `v <- lower.tri(m, diag = TRUE)` to see what `v` is
## read `?which` and try `which(v, arr.ind = TRUE)` to see what it gives
ij <- which(lower.tri(m, diag = TRUE), arr.ind = TRUE)
Real_name <- LETTERS[1:3]
data.frame(row = Real_name[ij[, 1]], col = Real_name[ij[, 2]], val = c(m[ij]))
# row col val
#1 A A 1
#2 B A 2
#3 C A 3
#4 B B 4
#5 C B 5
#6 C C 6
关于r - 将矩阵转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41021921/