2017-03-19 9 views
0

Ich habe einen Datensatz mit einer der Spalten als Date. Ich muss den Datensatz basierend auf all den Daten, die in den letzten drei Jahren liegen, unterteilen.Finde nur Datenpunkte in den letzten 3 Jahren von heute

Also wenn ich das Skript heute laufen lasse, muss es nur jene Daten behalten, die weniger als drei Jahre von heute sind, wenn ich es morgen laufen lassen würde, würde es jene Daten zurückgeben, die weniger als drei Jahre von Morgen sind.

Mein Beispieldatensatz ist wie folgt:

df <- structure(list(TransactionDate = structure(c(1391472000, 1335225600, 
1405641600, 1332460800, 1420156800, 1401321600, 1445299200, 1305158400, 
1305158400, 1367366400), tzone = "UTC", class = c("POSIXct", 
"POSIXt"))), .Names = "TransactionDate", row.names = c(NA, -10L 
), class = "data.frame") 


    TransactionDate 
1  2014-02-04 
2  2012-04-24 
3  2014-07-18 
4  2012-03-23 
5  2015-01-02 
6  2014-05-29 
7  2015-10-20 
8  2011-05-12 
9  2011-05-12 
10  2013-05-01 

Dies ist, was ich versuchte.

newDF <- as.data.frame(df[which((as.numeric(format(Sys.Date(), '%Y')) - (as.numeric(format(df$TransactionDate, '%Y')))) <= 3),]) 

Das gibt mir:

df[which((as.numeric(format(Sys.Date(), "%Y")) - (as.numeric(format(df$TransactionDate, "%Y")))) <= 3), ] 
1                        2014-02-04 
2                        2014-07-18 
3                        2015-01-02 
4                        2014-05-29 
5                        2015-10-20 

Die Ausgabe, die ich erwarte ist der erste Eintrag 2014-02-04 aus der obigen Ausgabe ausschließen, da es mehr als drei Jahren von heute ist, obwohl es auch aus ist 2014. Kann mir jemand dabei helfen?

+0

Was ist '2012-04-24' – akrun

+0

@akrun, als ich zum ersten Eintrag erwähnte, war ich von der Ausgabe von meinem Code, um den ersten Eintrag bedeuten. Da "2012-04-24" mehr als drei Jahre von heute ist, möchte ich, dass es ausgeschlossen wird. Ich habe die Frage geändert, um das klarzustellen. – krish

Antwort

1
library(dplyr) 
library(lubridate) 
newdf <- df %>% 
    filter(TransactionDate >= Sys.Date() - years(3)) 
0

Mit nur Basis R:

R> recent <- subset(df, as.Date(TransactionDate) >= Sys.Date() - 1095) 
R> head(recent) 
    TransactionDate 
3  2014-07-18 
5  2015-01-02 
6  2014-05-29 
7  2015-10-20 
+0

Solange der Code nicht für eine gesetzliche/behördliche Anforderung gilt, bei der ein Schaltjahr zusätzlicher Tag von Bedeutung sein könnte – Sharon

Verwandte Themen