2017-10-06 6 views
0

Ich möchte meinen Datenrahmen in der Datumsspalte sortieren. Mein Beispiel Datenrahmen:Wie ordne oder sortiere ich Daten mit R und dplyr

library(tidyverse)  

dates <- tibble(date = c("01-01-2017", "02-03-2017", "01-02-2017", "02-01-2017", "01-03-2017"), 
        value = c(8, 12, 4, 14, 11)) 

So folgt das nicht, weil es funktioniert nur Sorten an den Tagen.

arrange(dates, date) 
+0

Verwenden Sie 'as.Date()' oder 'dmy()' aus dem 'lubridate'-Paket, um sie in tatsächliche Datumsformate umzuwandeln. Wenn Sie Daten als Zeichenfolgen speichern, werden sie als solche alphabetisch sortiert. –

+0

Sie müssen Ihren Datumsvektor in eine Date-Klasse konvertieren, etwa so wie 'dat <- as.Date (dat $ date,"% m-% d-% Y ")'. wo ist der name deiner tibbly. – lmo

Antwort

1

Es ist ein Problem hier basierend auf Ihrem Kommentar, Datum Datentypen sollte als solches gespeichert werden, ein Datum, keine Zeichenfolge, auf diese Weise können Sie nach ihnen sortieren und filtern etc.

Wenn Sie wählen, um die Informationen auszugeben, können Sie es dann formatieren und es für Leute schön aussehen lassen .

Das erste Beispiel wird die Daten in tatsächliche Daten, dann können Sie nach dieser Spalte filtern/sortieren, die zweite wird nur sortieren, und wenn Sie eine andere Operation ausführen möchten, müssen Sie erneut konvertieren.

Option 1 (Gut):

dates_mos <- dates %>% 
    mutate(date = as.Date(date, "%d-%m-%Y")) %>% 
    arrange(date) 

Ausgang 1:

 date value 
     <date> <dbl> 
1 2017-01-01  8 
2 2017-01-02 14 
3 2017-02-01  4 
4 2017-03-01 11 
5 2017-03-02 12 

Option 2 (nicht so gut):

dates_mos <- dates %>% 
    arrange(date = as.Date(date, "%d-%m-%Y")) 

Ausgang 2:

 date value 
     <chr> <dbl> 
1 01-01-2017  8 
2 02-01-2017 14 
3 01-02-2017  4 
4 01-03-2017 11 
5 02-03-2017 12 
+0

Das Format sollte% d-% m-% Y sein, aber die Daten geben dieses% Y an -% m-% d als Ergebnis. Wenn ich es so formatiere, date $ date <- format (as.Date (Datum $ date, Format = "% Y-% m-% d"), "% d-% m-% Y") tut es nicht arbeite entweder und die Klasse wird wieder auf Zeichen geschaltet ... – Tdebeus

+0

@Tdebeus du verwechselst die textuelle Darstellung eines Datums mit einem Datums-Datentyp. Die erste ist eine Zeichenkette, die für einen Menschen wie ein Datum aussieht, die zweite ist ein Datum, das von einer Maschine gelesen werden kann, Sie können nur nach letzterer filtern/sortieren – User632716

+1

Sehr nette Bearbeitung Danke! – Tdebeus

2

Die Art und Weise, wie Sie die Daten in Ihrer Frage gespeichert haben, ist nicht zum Sortieren nach Daten geeignet. Es wird als reguläre Zeichenfolgen gespeichert, während Sie es als R als Daten erkennen möchten.

Tun Sie dies mit as.Date() einschließlich eines bestimmten Formats für die Datumszeichenkette. Aus Ihrer Frage ist es nicht klar, ob die Datumszeichenketten Tag-Monat-Jahr (format = "%d-%m-%Y") oder Monat-Tag-Jahr (format = "%m-%d-%Y") sind:

dates$date <- as.Date(dates$date, format="%d-%m-%Y") 
arrange(dates, date) 
# 1 2017-01-01  8 
# 2 2017-01-02 14 
# 3 2017-02-01  4 
# 4 2017-03-01 11 
# 5 2017-03-02 12 
+0

Das Format sollte "% d-% m-% Y" sein, aber die Daten geben als Ergebnis "% Y-% m-% d" an. Wenn ich es so formatiere wie "dates $ date <- format (as.Date (Datum $ date, format ="% Y-% m-% d "),"% d-% m-% Y "), dann tut es das nicht Funktioniert auch nicht und die Klasse wird wieder auf Zeichen geschaltet ... – Tdebeus

+0

Das Format, das die Maschine nach 'as.Date()' interpretiert, ist das Format, das Sie haben wollen. Was Sie * sehen * möchten, ist jedoch irrelevant, es sei denn, Sie müssen einen Bericht erstellen, in dem sie Standard-Datumsformate haben. Im Falle eines Berichts könnten Sie einfach Ihre formatierten Datumsdaten in Zeichenfolgen mit dem 'format()' umwandeln, auf das Sie in Ihrem Kommentar verwiesen haben. –

Verwandte Themen