【问题标题】:Ordering splitted categories by date按日期排序拆分类别
【发布时间】:2015-08-25 15:20:45
【问题描述】:

假设以下数据集名为 df:

Product Quantity Date

X       1        15/3/2015
Y       2        16/4/2014
X       1        21/5/2015 
X       2        11/12/2014
 Z      1        2/10/2015 
Y       1        17/5/2014 
Z       2        18/5/2014
Z       1        6/5/2015
Y       2        9/6/2014

我想根据不同的产品类别拆分数据框,然后按日期对每个类别进行排序。我使用以下代码拆分数据集

df2 <- split(df, df$Date)

我试过 df3

有没有办法按日期对每个拆分的类别进行排序?一般来说,拆分功能是否允许我对每个拆分类别执行功能?请注意,我的真实数据集包含 1000 多个产品类别。

【问题讨论】:

    标签: r split


    【解决方案1】:

    如果您不需要产品保持拆分状态,您也可以使用 dplyr 执行此操作。

    df$Date <- as.Date(as.character(df$Date), "%d/%m/%Y")
    
    library(dplyr)
    df %>%
        group_by(Product) %>%
        arrange(Date)
    
    
    Source: local data frame [9 x 3]
    Groups: Product
    
      Product Quantity       Date
    1       X        2 2014-12-11
    2       X        1 2015-03-15
    3       X        1 2015-05-21
    4       Y        2 2014-04-16
    5       Y        1 2014-05-17
    6       Y        2 2014-06-09
    7       Z        2 2014-05-18
    8       Z        1 2015-05-06
    9       Z        1 2015-10-02
    

    【讨论】:

      【解决方案2】:

      基础 R 解决方案。我使用lubridateDate 列转换为日期,但如果您的数据已经是数据格式,则不需要此步骤。 您的代码不起作用,因为split 返回一个列表;为了使代码有意义且正常工作,您必须遍历列表并对列表中每个元素的每一列 Date 进行排序(这是 Product 的数据框)。

      library(lubridate)
      df$Date <- dmy(df$Date)
      
      dfs <- split(df, df$Product)
      lapply(dfs, function(x) x[order(x$Date), ] )
      $X
      Product Quantity       Date
      4       X        2 2014-12-11
      1       X        1 2015-03-15
      3       X        1 2015-05-21
      
      $Y
      Product Quantity       Date
      2       Y        2 2014-04-16
      6       Y        1 2014-05-17
      9       Y        2 2014-06-09
      
      $Z
      Product Quantity       Date
      7       Z        2 2014-05-18
      8       Z        1 2015-05-06
      5       Z        1 2015-10-02
      

      【讨论】:

        猜你喜欢
        • 2012-03-28
        • 2015-02-14
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多