15

ここに簡単な答えがあることを願っていますが、どこにも見つかりません。

行名と列名を持つ数値行列があります。

#      1    2    3    4
# a    6    7    8    9
# b    8    7    5    7
# c    8    5    4    1
# d    1    6    3    2

行列を長い形式に溶かして、値を 1 つの列に、行列の行と列名をそれぞれ 1 つの列に入れたいと考えています。結果は次のようになりdata.tableますdata.frame

#  col  row  value
#    1    a      6
#    1    b      8
#    1    c      8
#    1    d      1
#    2    a      7
#    2    c      5
#    2    d      6
    ...

ヒントをいただければ幸いです。

4

4 に答える 4

20

reshape2meltから使用:

library(reshape2)
#Fake data
x <- matrix(1:12, ncol = 3)
colnames(x) <- letters[1:3]
rownames(x) <- 1:4
x.m <- melt(x)
x.m

   Var1 Var2 value
1     1    a     1
2     2    a     2
3     3    a     3
4     4    a     4
...
于 2012-04-19T18:51:14.757 に答える
18

as.tableと関数を一緒に使用すると、次のas.data.frameようになります。

> m <- matrix( sample(1:12), nrow=4 )
> dimnames(m) <- list( One=letters[1:4], Two=LETTERS[1:3] )
> as.data.frame( as.table(m) )
   One Two Freq
1    a   A    7
2    b   A    2
3    c   A    1
4    d   A    5
5    a   B    9
6    b   B    6
7    c   B    8
8    d   B   10
9    a   C   11
10   b   C   12
11   c   C    3
12   d   C    4
于 2012-04-19T19:44:48.573 に答える
11

「m」が行列であると仮定すると...

data.frame(col = rep(colnames(m), each = nrow(m)), 
           row = rep(rownames(m), ncol(m)), 
           value = as.vector(m))

これは、大規模なマトリックスで非常に高速に実行され、マトリックスの作成方法、マトリックス内のものへのアクセス方法、および独自のベクトルの作成方法についても少し説明します。

于 2012-04-19T19:00:03.323 に答える