我有一个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")
答案 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
将此结果写入文件。