我的数据框如下:
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
因为我不在乎名称之间的字母排序。
答案 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日
我相信这个问题已经重复了。确实,以防万一我把它放在这里,它有更多的信息: 如何按多个列对数据框进行排序?