2013-07-25 14 views
8

データを(%d /%m /%Y)としてフォーマットする必要があります。データは、月ではなく曜日である最初の数字でソートされているため、時系列ではありません。%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 

感謝を:ここで

は、いくつかの日付データを注文することです。

+0

あなたはまた、その中でその日付文字列を保存しますかネイティブフォーマットプロットのダニにラベルを付けるには?すなわち別の列として保存する – smci

答えて

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 
+0

ありがとう!私は何回Rに何かを知らせなければならないことが何回もあるのだろうかと思うが、答えは「毎回」と思う。 – Nazer

0

が、動作しているようです:

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

あなたのコードにいくつかのコメントと字下げを追加して、読みやすくする(水平スクロールを避ける)ことはできますか? –

8

これは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)) 
+1

アドオンパッケージを必要としないことで受け入れられるソリューションが勝利し、1つの声明でこの問題を解決するので、あなたがここで主張しているより簡単な点については異なると思う。 –

+3

あなたが望むなら、あなたはcode golfをプレイすることを歓迎します。私は、あなたの日付フォーマット文字列がどのように動作するのか、なぜ 'drop = FALSE'が必要なのかを知る必要がないので、私の解決策は良い方法だと思います。 – hadley

+1

Rを 'H' Rが何をするかという側面。 Don Quixoteで叫ぶためにスペインに残ったたくさんの風車:) –

関連する問題