这是最直接的方法吗将数组转换为 data.table?
require(data.table)
require(ggplot2)
# this returns a data.table with both array's dimensions and values
aaa <- array(rnorm(3*4*2), dim = c(3,4,2))
DT1 <- as.data.table(as.data.frame.table(aaa))
# the following does not work properly, because it only returns the array values
DT2 <- as.data.table(aaa)
# plot values aggregated by 3rd array dim
ggplot(DT1, aes(Var1, Freq, fill = Var3)) + geom_boxplot()
# sum values by 2nd array dim
DT1[ , sum(Freq), Var2]
编辑1:
抱歉,“正确”的意思是我得到一个仅包含一列的数据框,因此我不知道值源自原始数组中的哪个位置。
这个想法是将数组转换为平面表,这样更容易,例如使用维度作为因子绘制变量,或按因子聚合值。 DT2 还能实现这一点吗?
编辑2:
另一件有用的事情是将 data.table 转换回原始数组。您是否知道一个通过定义将哪些列用作维度来将 data.table 强制转换为数组的函数?
aaa <- array(rnorm(3*4*2), dim = c(3,4,2), list(Var1 = LETTERS[1:3], Var2 = LETTERS[1:4], Var3 = LETTERS[1:2] ))
DT1 <- setDT(melt(aaa))
# convert DT1 back to aaa
array(data = DT1[ ,value],
dim = c(length(unique(DT1[ ,Var1])),
length(unique(DT1[ ,Var2])),
length(unique(DT1[ ,Var3]))),
dimnames = list(Var1 = unique(DT1[ ,Var1]),
Var2 = unique(DT1[ ,Var2]),
Var3 = unique(DT1[ ,Var3])))
thanks!