根据R中的属性将表分成组

时间:2014-03-17 18:53:01

标签: r data-mining import-from-csv

我有一个表(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    ...  ...   ...  
  1. 现在我首先将此文件加载到一个列车变量中: -

    train< - read.csv(" train.csv")

  2. 然后,我根据商店划分/分组:

    dataByStore< - split(train,train $ Store)

  3. 现在,我想 dataByStore 并根据部门进行划分。因此,我将获得每个商店的每个部门的数据。我认为,为此,我必须初始化存储数量数组,例如:dataByStoredept,以及每个商店 i

    dataByStoreByDept [i]< - split(dataByStore [i],dataByStore [i] $ Dept)

  4. 因此, 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) 
    }
    

1 个答案:

答案 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执行第一次拆分。结果是一个列表。然后,我们使用lapplysplit创建的列表的每个元素应用split(df, as.factor(df$Store))。我将split放入包装函数中,以便将第二个拆分因子传递给split

这将为您提供所描述的列表列表。