2016-08-29 1 views
2

Ich möchte NUR das Viertel von einem Datum extrahieren, zum Beispiel, um eine Ganzzahl 1 vom Datum "2003-02-08" zu bekommen. Ich habe etwas entlang dieser Linie versuchtExtrahiere nur Viertel von einem Datum in r

library(mondate) 
as.yearqtr(dat$DATE) 

"2003 Q1"

as.character(as.yearqtr(dat$DATE))[1] 

"2003 Q1"

, die nicht zu geben hat mein Wunsch Ergebnis. Natürlich kann ich folgende Bedingungen schreiben:

Das wird funktionieren, ist aber überhaupt nicht elegant. Gibt es eine schönere Art, dies zu tun?

Danke lmo und user2100721! Ich wünschte wirklich, ich könnte alle Antworten akzeptieren!

Antwort

7

ich tun würde:

# example data 
DT = data.table(id = 1:10, d = as.IDate("2003-02-08") + seq(100, by=50, length.out=10)) 

DT[, qtr := quarter(d)] 

    id   d qtr 
1: 1 2003-05-19 2 
2: 2 2003-07-08 3 
3: 3 2003-08-27 3 
4: 4 2003-10-16 4 
5: 5 2003-12-05 4 
6: 6 2004-01-24 1 
7: 7 2004-03-14 1 
8: 8 2004-05-03 2 
9: 9 2004-06-22 2 
10: 10 2004-08-11 3 

Die quarter Funktion von data.table vorgesehen ist, und arbeitet auf beiden Date und IDate Vektoren. (IDate verwendet Ganzzahlspeicher.)

3

lubridate Paket hat die gleiche Funktion. Das können wir auch nutzen. Ich bin mit @ Frank DT

DT[, qtr := lubridate::quarter(d)] 
5

Es gibt eine Basis R-Funktion, quarters, dass mehr oder weniger erreicht, was Sie wollen, obwohl es prepends „Q“. So

quarters(as.Date("2001-05-01")) 
[1] "Q2" 

Wenn es wichtig ist, die Beseitigung des „Q“ zu bekommen, könnten Sie substr

substr(quarters(as.Date("2001-05-01")), 2, 2) 
[1] "2" 

Andere datumsbezogene Basis R-Funktionen, wie weekdays und months in Hilfe finden Seite ?quarters.

Verwandte Themen