首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用reshape2填充数组

使用reshape2填充数组
EN

Stack Overflow用户
提问于 2014-04-29 05:19:13
回答 2查看 83关注 0票数 0

我有一个维度为421,570x16的data.table对象,它存储多个商店的数据。商店可以有不同的部门。这只是一个虚构的例子。数据集更大。

代码语言:javascript
复制
> 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

基本上,我希望在数组的每个级别上都有每个部门的每周销售额,这样我就可以对数组对象运行一些时间序列分析,而不需要多次运行相同的函数。

此命令将为数组的一层生成我想要的矩阵类型。

代码语言:javascript
复制
dcast(raw.df[which(raw.df$Store == 1), ], Date ~ Dept, value.var = "Weekly_Sales")
head(e1)

我在考虑生成一个空数组并使用for loop填充它。我写了这个循环,不幸的是它不能工作。数组的维数是143 (天),99 (每个商店的部门),45 (商店)

代码语言:javascript
复制
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和编程完全是自学的。

EN

回答 2

Stack Overflow用户

发布于 2014-04-29 05:30:34

由于您没有提供易于使用的数据,因此我将使用reshape2附带的french_fries数据集:

代码语言:javascript
复制
str(french_fries)
acast(data=french_fries, time~treatment~subject, value.var='potato', fun.aggregate=mean)

治疗,每个受试者一片。

代码语言:javascript
复制
acast(data=raw_df, Date~Dept~Store, value.var='potato')

如果至少有一个Date~Dept~Store组合有多个值,则必须提供一个函数来聚合数据(缺省值为length,但会出现警告)。

票数 0
EN

Stack Overflow用户

发布于 2014-04-29 05:35:41

你想做什么样的分析?您最好保留原始的data.frame,并使用plyr包中的ddply来执行某些组的操作。我经常将其用于跨不同子集的时序分析。考虑以下示例:

代码语言:javascript
复制
dat<-data.frame(store=sample(1:3, 1000, T),
                type=sample(1:3, 1000, T),
                date=sample(1:100, 1000, T),
                val=rnorm(1000))
ddply(dat, .(store, type), # we can run a regression for our subgroups
      function(x){
        model<-lm(date ~ val, data=x)
        c(cf=coef(model), num=nrow(x), adjr2=summary(model)$adj.r.squared)
      })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23351383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档