我有一个表(csv文件),其中前两个属性是商店和部门,然后还有其他属性,如Date,Sales表格如下: -
Store Dept Date Sales Holiday
1 1 ... ... ... (... means some random value)
1 1 ... ... ...
1 2 ... ... ...
1 2 ... ... ...
1 3 ... ... ...
2 1 ... ... ...
2 1 ... ... ...
2 2 ... ... ...
2 2 ... ... ...
现在我首先将此文件加载到一个列车变量中: -
train< - read.csv(" train.csv")
然后,我根据商店划分/分组:
dataByStore< - split(train,train $ Store)
现在,我想 dataByStore 并根据部门进行划分。因此,我将获得每个商店的每个部门的数据。我认为,为此,我必须初始化存储数量数组,例如:dataByStoredept,以及每个商店 i 做
dataByStoreByDept [i]< - split(dataByStore [i],dataByStore [i] $ Dept)
因此, dataByStoreByDept [i] [0] 将包含商店i的第一个部门数据,依此类推。任何人都可以告诉我这样做的语法,因为我不知道如何声明这样的二维数组。用几行代码做一个简短的解释就足够了。
如果我上面的任何假设是错误的,请提及。
更新
对于第三步,我想编写一个函数,该函数应该如下(它只是我不知道的语法):
dataByStoreByDept<- array(seq_len(dataByStore)) -------> seq_len(dataByStore) is the number of stores
for(i in seq_len(dataByStore)){
dataByStoreByDept[i]<- split(dataByStore, dataByStore$dept)
}
答案 0 :(得分:1)
制作一些数据:
df <- data.frame(Store = sample(1:2, 20, replace = TRUE),
Dept = sample(1:2, 20, replace = TRUE))
假设我们要首先按df
然后按Store
拆分data.frame,Dept
。我们可以这样做:
lapply(split(df, as.factor(df$Store)), FUN = function(x) split(x, x$Dept))
split(df, as.factor(df$Store))
部分按Store
执行第一次拆分。结果是一个列表。然后,我们使用lapply
对split
创建的列表的每个元素应用split(df, as.factor(df$Store))
。我将split
放入包装函数中,以便将第二个拆分因子传递给split
。
这将为您提供所描述的列表列表。