[英]R: reverse reshape2's melt() on n-dimensional arrays
我在R中有一个三维数组,我可以使用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
一起acast
,但我找不到合适的参数:
y['idx'] = rownames(y)
acast(y, idx~Var1+Var2+Var3, value.var='value') # does not work this way
对于多个维度,您需要更多波形(如果我正确理解您的问题):
acast(y, Var1 ~ Var2 ~ Var3)
# , , 1
#
# 1 2
# 1 1 3
# 2 2 4
#
# , , 2
#
# 1 2
# 1 1 3
# 2 2 4
要概括此行为,您可以尝试使用paste
构建formula
:
Form <- as.formula(paste(grep("^Var", names(y), value=TRUE),
collapse = " ~ "))
acast(y, Form)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.