在向量中获取矩阵索引的列名和行名

4

我有一个4x4的矩阵,我想找出其中等于特定值(如1)的元素。我希望将这些元素的索引以及它们所在的行和列名保存到两个单独的向量中,并将所有信息写入一个txt文件。

我已经成功将索引保存到了txt文件中,但是我不知道如何从矩阵中获取列和行名。为了测试,我使用了以下示例:

mat <- matrix(c(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6), ncol=4, nrow=4)
colnames(mat) <- c("C1","C2","C3","C4")
rownames(mat) <- c("R1", "R2","R3","R4")

r.indices <- c()
c.indices <- c()
for (row in 1:nrow(mat)){
    for (col in 1:(ncol(mat)-row+1)){

        if (mat[row,col] == cutoff){
            #print("this is one!")
            r.indices <- c(r.indices,row)
            c.indices <- c(c.indices,col)
        }

     }
}


write.csv(cbind(r.indices, c.indices), file="data.txt")

使用您喜欢的网络搜索引擎进行搜索,可以找到在R中检索特定单元格的行和列名称的答案。 - user3710546
使用我最喜爱的网络搜索引擎进行搜索后,导航到了这里... - Scransom
1个回答

8
which(matrix == 5, arr.ind=TRUE)函数提供了一个很好的界面来获取满足特定条件的矩阵的所有行和列索引。使用arr.ind=TRUE参数,这比循环遍历每个矩阵元素少打字,效率也更高。例如,如果您想要获取矩阵中值等于5的所有索引,可以使用如下代码:
(idx <- which(mat == 5, arr.ind=TRUE))
#    row col
# R1   1   2
# R3   3   4

现在只需要使用矩阵的行和列名称进行简单的查找即可:
cbind(rownames(mat)[idx[,"row"]], colnames(mat)[idx[,"col"]])
#      [,1] [,2]
# [1,] "R1" "C2"
# [2,] "R3" "C4"

您可以使用write.csv将此结果写入文件。

你太棒了!非常感谢。关于加载巨大的RData文件怎么样?对于懒加载也不起作用的情况,你有什么建议吗? - wthimdh
@wthimdh 很不幸,我对于加载巨大的RData文件没有太多经验。我建议你在这个话题上提出一个单独的问题,这样整个R社区都可以看到并回答它。 - josliber
如果我想保留矩阵中索引在txt文件中的非零元素(但它并不是真正的稀疏矩阵),该怎么办?例如每行中都有列、行和值。我能否像idx <- which(mat != 5, arr.ind=TRUE)这样做呢?还是必须使用for循环? - wthimdh
@wthimdh 您可以使用 write.tablewrite.csv 将我展示的命令的输出写入文件。 - josliber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接