按日期排序拆分类别

时间:2015-08-25 15:20:46

标签: r split

假设以下名为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&lt; - df2 [order(df2 $ Date),]但是这给了我一个错误,即参数1不是一个向量(有意义)。

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

2 个答案:

答案 0 :(得分:2)

如果您不需要将产品分开,也可以使用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

答案 1 :(得分:1)

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

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