【发布时间】:2014-04-28 21:19:12
【问题描述】:
我有一个尺寸为 421,570 x 16 的 data.table 对象,它存储多个商店的数据。商店可以有不同的部门。这只是一个虚构的例子。数据集更大。
> head(raw.df)
Store Type StoreSize Dept Date Weekly_Sales
1: 1 A 151315 1 2010-02-05 24925
2: 1 A 151315 2 2010-02-05 46039
3: 2 A 152825 1 2010-02-05 41596
4: 2 A 152825 2 2010-02-05 19404
5: 3 B 110025 1 2010-02-05 21828
6: 3 B 110025 2 2010-02-05 21043
理想情况下,我想创建一个可以存储多个矩阵的数组对象,在每个矩阵上我想要一个存储。基本上我想在数组的每个级别上都有每个部门的每周销售额,这样我就可以对数组对象运行一些时间序列分析,而无需多次运行相同的函数。
此命令将为数组的一层生成我想要的矩阵类型。
dcast(raw.df[which(raw.df$Store == 1), ], Date ~ Dept, value.var = "Weekly_Sales")
head(e1)
我正在考虑生成一个空数组并使用for loop 填充它。我写了这个循环,不幸的是它不起作用。
数组的维度是143(天)、99(每个店铺的部门)、45(店铺)
ts.a <- array(data = NA, dim = c(143, 99, 45))
for (i in 1:45) {
# generate 45 matrices, one for each store
paste("mat", i, sep = "") <- matrix(data = NA, nrow = 143, ncol = 99)
paste("mat", i, sep = "") <- dcast(raw.df[which(raw.df$Store == i), ], Date ~ Dept,
value.var = "Weekly_Sales")
# merge the matrix into the array object
}
我意识到我的方法可能完全错误。我的知识或 R 和编程完全是自学的。
【问题讨论】:
-
我有点不清楚为什么您似乎认为 3 维数组将是存储这些数据的最有效方式。你能详细说明一下吗?
-
与其要求特定的解决方案来解决您的问题,不如告诉我们您的实际问题是什么?
data.table非常适合这种类型的分析(对多组数据应用类似的计算)。 -
我同意之前的 cmets,并且,将
?xtabs视为未来的实用程序;例如xtabs(Weekly_Sales ~ Date + Dept + Store, DF)