r - 将矩阵转换为列

标签 r matrix

假设我有一个如下所示的矩阵,对角线上方或下方的值相同。换句话说,[,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/

相关文章:

R:如何合并更多 2 个数据框并添加值?

R:从 PDF 中提取日期和数字

r - 使用以倒数第二个值作为 .init 参数的累加函数

r - R 函数 bs() 输出的解释(B 样条基矩阵)

r - 在 R 中使用 apply() 对三个矩阵列表进行矩阵乘法?

r - ggplot2 - 删除 R 中的大小图例

java - 如何在没有 RStudio 的情况下运行 Rshiny 小程序

arrays - 生成不重复的组合(排列)矩阵(数组超出最大数组大小首选项)

python-3.x - 将 23AC 等坐标转换为 (x,y)

python - 稀疏矩阵加法产生 'ValueError: setting an array element with a sequence.'