2013-07-25 9 views
8

Mam dane, które muszą być sformatowane jako (% d /% m /% Y). Dane są poza porządkiem chronologicznym, ponieważ są sortowane według pierwszej liczby, która jest dniem, a nie miesiącem.Zamów ramkę danych chronologicznie w oparciu o daty sformatowane w% d /% m /% Y

Mam nadzieję, że mogę określić, aby order lub reorder, że chcę, aby sortowanie stało się inaczej. Po prostu nie jestem pewien, jak to zrobić.

Oto niektóre dane data zamawiane:

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 

Dzięki za wszelkie sugestie.

+0

Czy Ty też chcesz zachować tą datą stringi w swojej format natywny np do oznaczania kleszczy na działkach? tj. zachowaj jako osobną kolumnę – smci

Odpowiedz

10

Po zamówieniu przez kolumnę date skonwertuj ten format daty.

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

Dzięki! Zastanawiam się, ile razy muszę powiedzieć R coś jest randką, ale myślę, że odpowiedź brzmi "za każdym razem". – Nazer

0

brzydki, ale wydaje się działać:

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

Czy mógłbyś dodać kilka komentarzy i wcięć do kodu, abyśmy mogli go lepiej przeczytać (i uniknąć przewijania w poziomie)? –

8

Jest to łatwiejsze z niewielką pomocą plyr i 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

Zapraszam do odmiennego * łatwiejszego * roszczenia, ponieważ zaakceptowane rozwiązania wygrywają, nie wymagając dodatkowych pakietów, a także rozwiązują problem w pojedynczej instrukcji. –

+3

Jeśli chcesz, możesz grać w golfa z kodem. Myślę, że moje rozwiązanie jest dobrą alternatywą, ponieważ nie musisz wiedzieć o tym, jak działają ciągi formatów daty, lub dlaczego potrzebujesz 'drop = FALSE' – hadley

+1

. Zapraszam do ponownego wpisania R w 'H', zastępując/przedefiniowując każdy pojedynczy aspekt tego, co robi R. Mnóstwo wiatraków pozostało w Hiszpanii, żeby krzyczeć, Don Kichot :) –

Powiązane problemy