按名称排序数据框,然后按日期排序,同时保持名称排序

时间:2018-09-10 12:59:57

标签: r

我的数据框如下:

    product<-c("asd","saf","asd","bc","asd","saf","bc","saf")
date<-as.Date(c("2018-07-29","2018-07-25","2018-07-28","2018-06-29","2018-07-21","2018-07-12","2018-02-28","2018-07-10"))
p<-data.frame(product,date)

我要实现的是先按产品名称对数据框进行排序,然后再按日期对数据框进行排序,而不会破坏初始排序。

我使用:

p <- p %>% arrange(product)

按名称排序,但当我使用时:

p<-p[order(as.Date(p$date, format="%Y/%m/%d")),]

名称排序丢失。

可接受的解决方案是:

product       date
1     asd 2018-07-25
2     asd 2018-07-28
3     asd 2018-07-29
4     saf 2018-02-28
5     saf 2018-06-29
6     saf 2018-07-10
7      bc 2018-02-28
8      bc 2018-07-12

因为我不在乎名称之间的字母排序。

2 个答案:

答案 0 :(得分:1)

使用sqldf

library(sqldf)
sqldf("select * from p order by product,date")

输出:

  product       date
1     asd 2018-07-21
2     asd 2018-07-28
3     asd 2018-07-29
4      bc 2018-02-28
5      bc 2018-06-29
6     saf 2018-07-10
7     saf 2018-07-12
8     saf 2018-07-25

答案 1 :(得分:1)

基本排序考虑了两列:

  p [order(p $ product,p $ date),]
 

输出:

 产品日期
5 asd 2018-07-21
3 ASD 2018-07-28
1天2018-07-29
公元前7 bc 2018-02-28
公元前4年2018年6月29日
2018年10月8日
6月2018年7月12日
2月2018年7月25日
 

我相信这个问题已经重复了。确实,以防万一我把它放在这里,它有更多的信息: 如何按多个列对数据框进行排序?