如何通过矩阵索引值检索矩阵列和行名称?

时间:2012-03-29 18:26:34

标签: r matrix indexing rows

所以让我说我有一个矩阵,mdat,我只知道索引号。如何检索列名和行名?例如:

> mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol=3, byrow=TRUE, 
    dimnames = list(c("row1", "row2"), c("C.1", "C.2", "C.3"))) 
> mdat[4] 
[1] 12 
> names(mdat[4]) 
NULL 
> colnames(mdat[4]) 
NULL 
> rownames(mdat[4])
NULL 
> dimnames(mdat[4]) 
NULL 

2 个答案:

答案 0 :(得分:27)

首先,您需要使用arrayInd获取该索引的行和列。

k <- arrayInd(4, dim(mdat))

然后,您可以通过获取行名和列名

的元素来获取正确的名称
rownames(mdat)[k[,1]]
colnames(mdat)[k[,2]]

或者同时使用mapply

mapply(`[[`, dimnames(mdat), k)

答案 1 :(得分:7)

首先对矩阵进行子集化会产生一个没有名称的单元素向量,如您在问题中所示。请记住,子集通过复制创建一个全新的对象。在子集化后无法引用原始mdat

如果将子集的结果分配给另一个对象,则更清楚。

> m <- mdat[4]
> m
[1] 12
> names(m)  # no names were printed above... so
NULL

您真的想先访问列/行名称,然后将子集

> colnames(mdat)[3]
[1] "C.3"
> rownames(mdat)[2]
[1] "row2"

您可以类似地重新指定列/行名称。

> colnames(mdat)[3] <- "C3"
> rownames(mdat)[2] <- "row.2"
> mdat
      C.1 C.2 C3
row1    1   2  3
row.2  11  12 13