0

我在 R 中有一个 3 维数组,可以melt()用来生成 long 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
4

1 回答 1

2

对于多个维度,您需要更多波浪号(如果我正确理解了您的问题):

acast(y, Var1 ~ Var2 ~ Var3)
# , , 1
# 
#   1 2
# 1 1 3
# 2 2 4
# 
# , , 2
# 
#   1 2
# 1 1 3
# 2 2 4

要概括此行为,您可以尝试构造 a formulawith paste

Form <- as.formula(paste(grep("^Var", names(y), value=TRUE), 
                         collapse = " ~ "))
acast(y, Form)
于 2014-05-08T16:14:26.317 回答