代码之家  ›  专栏  ›  技术社区  ›  AvinashK

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

  •  0
  • AvinashK  · 技术社区  · 10 年前

    我有一个 表格(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变量中:-

      列车<-读取.csv(“train.csv”)

    2. 然后,我根据商店对其进行了划分/分组:

      数据按存储<-拆分(train,train$商店)

    3. 现在,我想 数据(按存储) 并根据 部门 。因此,作为结果,我将获得 每个商店的每个部门 。我想为此,我必须初始化 大堆 数量的大小 商店 例如:dataByStoredept,每个商店

      数据按存储部门[i]<-拆分(dataByStore[i],dataByStore[i]$Dept)

    所以 数据按存储按部门[i][0] 将包含store i等的第一个部门数据。有人能告诉我这样做的语法吗,因为我不知道如何声明这样的2d数组。简短的解释加上几行代码就足够了。

    请务必提及我的上述假设是否有误。

    更新:
    对于第三步,我想编写一个函数,它应该如下(这只是我不知道的语法):

    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 回复  |  直到 9 年前
        1
  •  2
  •   Christopher Louden    10 年前

    编造一些数据:

    df <- data.frame(Store = sample(1:2, 20, replace = TRUE), 
                     Dept  = sample(1:2, 20, replace = TRUE))
    

    假设我们想要分割data.frame, df ,首先由 Store 然后由 Dept 。我们可以这样做:

    lapply(split(df, as.factor(df$Store)), FUN = function(x) split(x, x$Dept))
    

    这个 split(df, as.factor(df$Store)) 部分进行第一次拆分 百货商店 。结果是一个列表。然后我们使用 lapply 应用 split 在由创建的列表的每个元素上 拆分(df,作为.factor(df$Store)) 。我把 分裂 将第二个拆分因子传递给 分裂 .

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