我有一个矩阵,如:
> 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
我的问题是 - 有没有一种干净的方法来反过来?
答案 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