R - 二维值的数据框架到矩阵?

时间:2014-02-03 07:23:30

标签: r

我有一个矩阵,如:

> mt <- matrix(1:9, nrow=3, ncol=3)
> dimnames(mt) <- list( c('a','b','c'), c('x','y','z') )
> mt
  x y z
a 1 4 7
b 2 5 8
c 3 6 9

我可以将其转换为表格格式:

> as.data.frame(as.table(mt))
  Var1 Var2 Freq
1    a    x    1
2    b    x    2
3    c    x    3
4    a    y    4
5    b    y    5
6    c    y    6
7    a    z    7
8    b    z    8
9    c    z    9

我的问题是 - 有没有一种干净的方法来反过来?

2 个答案:

答案 0 :(得分:1)

reshape2::acast

怎么样?
require(reshape2)
acast(m,Var1~Var2)

#  x y z
#a 1 4 7
#b 2 5 8
#c 3 6 9

ps:你可以使用reshape2::melt()走另一条路

答案 1 :(得分:1)

您可以使用:?xtabs:使用公式界面从交叉分类因子(通常包含在数据框中)中创建列联表(可选地为稀疏矩阵)。

 xtabs(Freq~Var1+Var2,Data)
    Var2
Var1 x y z
   a 1 4 7
   b 2 5 8
   c 3 6 9  

您也可以使用:?acsat:根据您是否需要向量/矩阵/数组输出或数据帧输出,使用acast或dcast。数据框最多可以包含两个维度。

library(reshape2)
zz <- "Var1 Var2 Freq
1    a    x    1
2    b    x    2
3    c    x    3
4    a    y    4
5    b    y    5
6    c    y    6
7    a    z    7
8    b    z    8
9    c    z    9"
Data <- read.table(text=zz, header = TRUE)

acast(Data, Var1 ~ Var2)
Using Freq as value column: use value.var to override.
  x y z
a 1 4 7
b 2 5 8
c 3 6 9