2016-11-23 2 views
2

Dies ist eine sehr einfache Frage, so hoffentlich ist es einfach zu beantworten. Hier einige Beispieldaten:R Programmierung - Setzen Sie das Ende eines Zeitrahmens auf heute

a <- seq(as.Date("2016-10-10"), as.Date("2016-11-22"), by = "day") 
data.table(a) 

Ich versuche, einen zeitlichen Rahmen in R zu setzen, so dass das Enddatum heute. Ich habe Code, das funktioniert:

b <- a[a%between% c("2016-10-20", "2016-11-21")] 

Ich versuchte Sys.Date() zu verwenden, und es funktioniert nicht, und ich habe keine Ahnung, warum:

gamesplayed <- gamesplayed[Date %between% c("2016-10-20", Sys.Date())] 

ich den Fehler Error in charToDate(x) : character string is not in a standard unambiguous format, die ich gegoogelt und es scheint, dass die Antworten auf Datumsformatfehler bezogen sind, und ich kann nicht herausfinden, warum das mein Fehler wäre. Danke für die Hilfe.

Antwort

6

Sie müssen alles in einem einheitlichen Format haben, entweder Date Objekt oder character Zeichenfolge. Z.B .:

a[a %between% c(as.Date("2016-10-20"), Sys.Date())] 
# [1] "2016-10-20" "2016-10-21" "2016-10-22" "2016-10-23" "2016-10-24" 
# ... 
#[31] "2016-11-19" "2016-11-20" "2016-11-21" "2016-11-22" 

Es wäre besser, immer Date zu Date explizit zu vergleichen, wenn sie mit, na ja, Daten zu tun. Auch wenn R gelegentlich Date mit character vergleichen kann, funktionierte der ursprüngliche Code, wenn Sie den Bereich %between% als beide character Objekte angeben.

Sys.Date() == "2016-11-23" 
#[1] TRUE 
Sys.Date() == as.Date("2016-11-23") 
#[1] TRUE 
+1

Spot auf. Die Verwendung geeigneter Typen ist der Schlüssel und ermöglicht sogar das Arbeiten mit Daten. –

+0

meine Güte, fühle ich mich dumm ... danke für die Hilfe. – runnin4tay5000

Verwandte Themen