假设以下名为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个产品类别。
答案 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解决方案。我使用lubridate
将Date
列转换为日期,但如果您的数据已经是数据格式,则不需要此步骤。
您的代码不起作用,因为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