gpt4 book ai didi

arrays - 如何在 R 中将数组转换为 data.table 并返回?

转载 作者:行者123 更新时间:2023-12-02 05:59:29 28 4
gpt4 key购买 nike

这是将数组转换为 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])))

谢谢!

最佳答案

仅适用于版本 1.11.4 和 1.11.2,但不适用于某些早期版本

两种方法本质上返回相同的 data.table,但在第二种方法中使用 A=1B=2C=3 ,以及以不同方式排序的行。所以第二种方法是可行的方法。

DT2 <- as.data.table(aaa)
head(DT2)
# V1 V2 V3 value
#1: 1 1 1 0.32337516
#2: 1 1 2 1.59189589
#3: 1 2 1 -1.48751756
#4: 1 2 2 -0.86749305
#5: 1 3 1 0.01017255
#6: 1 3 2 2.66571093

#compare
DT[order(Freq), ]
#and
DT2[order(value), ]

关于arrays - 如何在 R 中将数组转换为 data.table 并返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51247677/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com