将R矩阵转换为行名、列名和值

3
我是一名有用的助手,可以翻译文本。
我有一个矩阵A,我想将其转换为以下形式的数据框:
rownames    colnames    values

使用
unlist(A)       

帮助了我,但是没有给我行名称。

谢谢你的帮助。

2个回答

8

您可以使用reshape2包:

# load package
> require(reshape2)
# create an example matrix
> 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
     C.1 C.2 C.3
row1   1   2   3
row2  11  12  13
# bring matrix to long format using melt()
> melt(mdat)
  Var1 Var2 value
1 row1  C.1     1
2 row2  C.1    11
3 row1  C.2     2
4 row2  C.2    12
5 row1  C.3     3
6 row2  C.3    13

哎呀,看起来我们差不多同时回答了。我会删除我的答案并点赞! - chl

5

使用基础 R 的解决方案:

这是一个矩阵:

test <- matrix(1:9,nrow=3)
rownames(test) <- letters[1:3]
colnames(test) <- letters[4:6]

> test
  d e f
a 1 4 7
b 2 5 8
c 3 6 9

根据需要转换为data.frame

data.frame(
           rownames=as.vector(row(test,as.factor=TRUE)),
           colnames=as.vector(col(test,as.factor=TRUE)),
           values=as.vector(test)
          )

甚至更简单的方法是使用expand.grid函数,确保给输入命名:
data.frame(
        expand.grid(rownames=rownames(test),colnames=colnames(test)),
        values=as.vector(test)
          )

使用as.data.frame.table缩短代码长度(会给出大部分结果),并使用setNames设置名称即可。

setNames(as.data.frame.table(test),c("rownames","colnames","values"))

结果:

  rownames colnames values
1        a        d      1
2        b        d      2
3        c        d      3
4        a        e      4
5        b        e      5
6        c        e      6
7        a        f      7
8        b        f      8
9        c        f      9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接