R:在n维阵列上反向重塑2的熔化()

时间:2014-05-08 16:01:33

标签: arrays r dataframe reshape2 melt

我在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

1 个答案:

答案 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)