在向量

时间:2016-03-01 05:17:07

标签: r matrix vector

我有一个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")

1 个答案:

答案 0 :(得分:4)

which函数已经提供了一个很好的接口,可以使用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将此结果写入文件。