按时间顺序排序数据框,格式为%d /%m /%Y的日期

Naz*_*zer 8 r date-formatting

我有一些数据必须格式化为(%d /%m /%Y).数据不按时间顺序排列,因为它按第一个数字排序,即第一个数字,而不是月份.

我希望我可以指定order或者reorder我希望排序以不同的方式发生.我只是不确定该怎么做.

以下是要订购的日期数据:

date
1/1/2009  
1/1/2010
1/1/2011
5/4/2009
5/4/2011
10/2/2009
10/3/2011
15/9/2010
15/3/2009
31/12/2011
31/7/2009
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何建议.

Did*_*rts 10

按列排序时date将其转换为日期格式.

df[order(as.Date(df$date,format="%d/%m/%Y")),,drop=FALSE]
         date
1    1/1/2009
6   10/2/2009
9   15/3/2009
4    5/4/2009
11  31/7/2009
2    1/1/2010
8   15/9/2010
3    1/1/2011
7   10/3/2011
5    5/4/2011
10 31/12/2011
Run Code Online (Sandbox Code Playgroud)


had*_*ley 9

在plyr和lubridate的帮助下,这更容易:

library(lubridate)
library(plyr)

df <- read.csv(text = "date
1/1/2009  
1/1/2010
1/1/2011
5/4/2009
5/4/2011
10/2/2009
10/3/2011
15/9/2010
15/3/2009
31/12/2011
31/7/2009", stringsAsFactors = FALSE)

# Convert variable to date    
df$date <- dmy(df$date)
arrange(df, date)
# Or for descending order
arrange(df, desc(date))
Run Code Online (Sandbox Code Playgroud)

  • 如果您愿意,欢迎您打码打高尔夫球.我认为我的解决方案是一个不错的选择,因为你不需要知道日期格式字符串是如何工作的,或者为什么你需要`drop = FALSE` (3认同)
  • 谢谢,@hadley。我一直在努力在 R 中使用日期,所以我肯定会研究 lubridate。 (2认同)