web-dev-qa-db-ja.com

マトリックスのインデックス値でマトリックスの列と行の名前を取得するにはどうすればよいですか?

それでは、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 
19
user1301593

最初に、arrayIndを使用してそのインデックスの行と列を取得する必要があります。

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

次に、行と列の名前の要素を取得することにより、正しい名前を取得できます

rownames(mdat)[k[,1]]
colnames(mdat)[k[,2]]

または、両方を同時にmapplyを使用して:

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

質問に示されているように、最初に行列をサブセット化すると、名前のない1要素ベクトルになります。サブセット化すると、コピーによって完全に新しいオブジェクトが作成されることに注意してください。サブセット化した後、元のmdatを参照する方法はありません。

これは、サブセット化の結果を別のオブジェクトに割り当てると、より明確になります。

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

あなたは本当に最初に列/行名にアクセスしてサブセットthemにアクセスしたいのです。

> 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
7
Joshua Ulrich