我在R中有一个三维数组,我可以使用melt()
来生成一个长data.frame
:
library(abind)
library(reshape2)
a = matrix(1:4, nrow=2, ncol=2)
x = abind(a, a, along=3)
y = melt(x)
y
产生:
Var1 Var2 Var3 value
1 1 1 1 1
2 2 1 1 2
3 1 2 1 3
4 2 2 1 4
5 1 1 2 1
6 2 1 2 2
7 1 2 2 3
8 2 2 2 4
如何将数据转换回原始数组?它应该与acast
一起使用,但我找不到合适的参数:
y['idx'] = rownames(y)
acast(y, idx~Var1+Var2+Var3, value.var='value') # does not work this way
答案 0 :(得分:2)
对于多个维度,你需要更多的代数(如果我理解你的问题):
acast(y, Var1 ~ Var2 ~ Var3)
# , , 1
#
# 1 2
# 1 1 3
# 2 2 4
#
# , , 2
#
# 1 2
# 1 1 3
# 2 2 4
要概括此行为,您可以尝试使用formula
构建paste
:
Form <- as.formula(paste(grep("^Var", names(y), value=TRUE),
collapse = " ~ "))
acast(y, Form)