R中的自定义排序顺序方法?

时间:2014-07-22 09:49:43

标签: r sorting date

我有一个data.frame d,其日期列的格式为d $ date [1] =“01-Jan-09”,直到d $ date [1825] =“31-Dec-13”。当我使用命令对其进行排序时,

d[order(as.Date(d$date,format="%d%b%y")),] 

它按照时间顺序正确排序,但是我希望它可以忽略这些年来排序。

我想要的是“09年1月1日”,“01年1月1日”,“01年1月1日”,......,“31-Dec-11”, “31-Dec-12”,最后是“31-Dec-13”。

是否有一种简单的方法可以在不进行自定义功能的情况下实现此订单?

3 个答案:

答案 0 :(得分:3)

只需将年份从您的format订单中删除即可:

d <- seq.Date(from=as.Date("2009-01-01"),to=as.Date("2013-12-31"),by=1)
head(d[order(format(d,"%m%d"))])
[1] "2009-01-01" "2010-01-01" "2011-01-01" "2012-01-01" "2013-01-01"
[6] "2009-01-02"

答案 1 :(得分:1)

使用format

dat <- c("31-Dec-12","01-Jan-10", "01-Feb-11", "01-Jan-09" , "31-Dec-11")

dat <- as.Date(dat,format="%d-%b-%y")

dat[order(format(dat, "%y%m%d"))]
[1] "2009-01-01" "2010-01-01" "2011-02-01" "2011-12-31" "2012-12-31"

答案 2 :(得分:0)

您可以使用lubridate包来执行此操作。

library(lubridate)
days <- seq(ymd("2009-01-01"), ymd("2013-01-01"), by = "1 day")
days[order(month(days), day(days), year(days))]

HTH

相关问题