Order dataframe chronologically based on dates which are formatted %d/%m/%Y

妖精的绣舞 提交于 2019-12-05 22:40:57

问题


I have some data that has to be formatted as (%d/%m/%Y). The data is out of chronological order because it is sorted by the first number which is the day, not the month.

I'm hoping I can specify to order or reorder that I want the sorting to happen differently. I'm just not sure how to do this.

Here is some date data to be ordered:

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

Thanks for any suggestions.


回答1:


When order by column date convert it Date format.

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



回答2:


This is easier with a little help from plyr and 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))



回答3:


Ugly but seems to work:

date[order(sapply(strsplit(date, "/"), 
                  function(x) { paste(x[3], sprintf("%02d", as.integer(x[1])), 
                                            sprintf("%02d", as.integer(x[2])), 
                                            sep="") 
                              }
                 )
          )
    ]


来源:https://stackoverflow.com/questions/17864490/order-dataframe-chronologically-based-on-dates-which-are-formatted-d-m-y

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!