R:将矩阵重新排列为三列

标签 r

我在 R 中有一个矩阵。每个条目 i , j是一个分数,rownames 和 colnames 是 ids。

我只想要一个 3 列矩阵,而不是矩阵:i , j , score
现在我正在使用嵌套的 for 循环。喜欢:

for(i in rownames(g))
    {
        print(which(rownames(g)==i))
        for(j in colnames(g))
        {
            cur.vector<-c(cur.ref, i, j, g[rownames(g) %in% i,colnames(g) %in% j])
            rbind(new.file,cur.vector)->new.file
        }

    }

但我认为那是非常低效的……我确信有更好的方法,我只是对 R 还不够好。
想法?

最佳答案

如果我理解正确,您需要展平矩阵。
您可以使用 as.vectorrep添加 id 列,例如:

m = cbind(c(1,2,3),c(4,5,6),c(7,8,9))
row.names(m) = c('R1','R2','R3')
colnames(m) = c('C1','C2','C3')

d <- data.frame(i=rep(row.names(m),ncol(m)),
                j=rep(colnames(m),each=nrow(m)),
                score=as.vector(m))

结果:
> m
   C1 C2 C3
R1  1  4  7
R2  2  5  8
R3  3  6  9

> d
   i  j score
1 R1 C1     1
2 R2 C1     2
3 R3 C1     3
4 R1 C2     4
5 R2 C2     5
6 R3 C2     6
7 R1 C3     7
8 R2 C3     8
9 R3 C3     9

请注意,此代码将矩阵转换为 data.frame ,因为行和列名称可以是字符串,并且您不能拥有具有不同列类型的矩阵。
如果您确定所有行和列名称都是数字,则可以将其强制转换为矩阵。

关于R:将矩阵重新排列为三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9913464/

相关文章:

r - 使用 R 进行复杂表分析

r - 在 R 中将日期转换为 unix 时间

r - tidyr::pivot_longer() 函数不适用于将列从逻辑转换为整数的 tibble

R:聚类——如何预测新病例?

r - 如何使用 dplyr 合并汇总频率表

java - 如何使用 Rserve 从 Java 中的 R 脚本导出数据?

rJava 安装在 macOS 10.14 上失败

r - 如何在不将每个绘图对象打印到屏幕的情况下将自定义调色板列表附加到 ggplot 对象列表?

r - 如何使用 dplyr 添加灵活的增量列?

r - 如何使用 R 中的 apply 将字符串粘贴到字符串向量的每个元素上?