Vergleichen Sie zwei Termine in R
Ich habe eine tab-getrennte text-Datei, die ich importiert R. benutzte ich den folgenden Befehl für den import:
data = read.table(soubor, header = TRUE, sep = "\t", dec = ".", colClasses =c("numeric","numeric","character","Date","numeric","numeric"))
Wenn ich str(data)
zu überprüfen, die Daten-Typen der meine Spalten bekomme ich:
'data.frame': 211931 obs. of 6 variables:
$ DataValue : num 0 0 0 0 0 0 0 0 0 NA ...
$ SiteID : num 1 1 1 1 1 1 1 1 1 1 ...
$ VariableCode: chr "Sucho" "Sucho" "Sucho" "Sucho" ...
$ DateTimeUTC : Date, format: "2012-07-01" "2012-07-02" "2012-07-03" "2012-07-04" ...
$ Latitude : num 50.8 50.8 50.8 50.8 50.8 ...
$ Longitude : num 15.6 15.6 15.6 15.6 15.6 ...
Einem reproduzierbaren Muster der ersten 20 Zeilen meine Daten hier:
my_sample = dput(Daten[1:20,])
structure(list(DataValue = c(0, 0, 0, 0, 0, 0, 0, 0, 0, NA, NA,
NA, NA, NA, NA, NA, NA, 0, 0, 0), SiteID = c(1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), VariableCode = c("Sucho",
"Sucho", "Sucho", "Sucho", "Sucho", "Sucho", "Sucho", "Sucho",
"Sucho", "Sucho", "Sucho", "Sucho", "Sucho", "Sucho", "Sucho",
"Sucho", "Sucho", "Sucho", "Sucho", "Sucho"), DateTimeUTC = structure(c(15522,
15523, 15524, 15525, 15526, 15527, 15528, 15529, 15530, 15531,
15532, 15533, 15534, 15535, 15536, 15537, 15538, 15539, 15540,
15541), class = "Date"), Latitude = c(50.77, 50.77, 50.77, 50.77,
50.77, 50.77, 50.77, 50.77, 50.77, 50.77, 50.77, 50.77, 50.77,
50.77, 50.77, 50.77, 50.77, 50.77, 50.77, 50.77), Longitude = c(15.55,
15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55,
15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55,
15.55)), .Names = c("DataValue", "SiteID", "VariableCode", "DateTimeUTC",
"Latitude", "Longitude"), row.names = c(NA, 20L), class = "data.frame")
Nun will ich meine filter-Tabelle nach dem Datum. Beachten Sie, dass ich mit meinem code in einem for
Schleife. Zuerst, ich Untermenge, dass meine Daten von 1. Juli 2012 und einige Verarbeitung. Dann, ich Untermenge, dass meine Daten von der 2. Juli und machen einige Verarbeitung und so weiter.. Zum Beispiel, ich möchte alle Zeilen mit Datum gleich 6. Juli 2012. Ich habe versucht den code:
startDate = as.Date("2012-07-01");
endDate = as.Date("2012-07-20");
all_dates = seq(startDate, endDate, 1);
#the following code I'm trying to run inside a loop...
for (j in 1:length(all_dates)) {
filterdate = all_dates[j];
my_subset = my_sample[my_sample$DateTimeUTC == filterdate,]
#now I want do do some processing on my_subset...
}
Aber der obige code gibt ein leeres dataset ab Schritt 7 der Schleife.
So, zum Beispiel:
subset_one = my_sample[my_sample$DateTimeUTC == all_dates[6],]
gibt: 3 obs of 6 variables
.
Aber, aus unerfindlichen Gründen, Beispiel:
subset_two = my_sample[my_sample$DateTimeUTC == all_dates[7],]
gibt: 0 obs of 6 variables
.
(Hinweis: bearbeitete ich den oben genannten code um mein problem zu 100% reproduzierbar)
Irgendwelche Ideen was ich falsch mache?
data[data$DateTimeUTC == as.Date("2012-07-04"),]
Bitte Lesen Sie eine Einführung in R-basic lernen unterteilen.- Dein Beispiel funktioniert und liefert die gewünschten Ergebnisse, aber aus irgendeinem Grund, wenn ich den filter Datum programmgesteuert (z.B. innerhalb einer for-Schleife), bekomme ich ein leeres dataset. Ich bearbeitet meine Beispiel-code, um zu klären, mein problem.
- Ich kann dir nicht helfen ohne ein reproduzierbares Beispiel. Aber ich Wette mein Mittagessen, dass Sie nicht brauchen eine
for
Schleife und sollte nicht verwenden Sie eine. - Ich bearbeitet das Beispiel sogar noch mehr, um es reproduzierbar. Es ist sehr merkwürdig. Ohne die
for
Schleife, die Teilmenge ist richtig. Innerhalb derfor
Schleife, die Teilmenge ist immer leer. - Ein Beispiel ist nicht reproduzierbar ohne einige Daten, die Exponate das problem. Verwenden
dput(head(data))
um eine kleine Datenmenge, die wir einfügen können in einer R-Sitzung. - funktioniert gut für mich
- Burkhead: Sie sind richtig, mit den ersten 10 oder 20 Zeilen code funktioniert. Aber bei meinen Daten ist wirklich riesig (200.000 Zeilen) die Untergruppen nach Datum nicht mehr funktioniert. Also es ist wirklich schwierig für mich, das problem zu reproduzieren. Vielleicht werde ich versuchen, extrahieren Sie eine Probe aus der Mitte oder am Ende von meinen Daten...
- Look up " - split anwenden, kombinieren," um zu sehen, wie Sie können loszuwerden, die
for
Schleife.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende Lösung, die mein problem gelöst:
Anstelle der Verwendung der
Date
Daten geben, ich habe versucht, diePOSIXct
Daten geben.Hier ist der Beispiel code für das Lesen der tab-getrennten Textdatei, nach der die Untergruppen arbeiteten in allen Schritten meiner
for
Schleife:subset
Befehl, so habe ich-subset(Daten, Daten$DateTimeUTC %in% all_dates). In meinem Fall muss ich wickeln Sie Daten mitas.Date
Funktion subset(Daten, als.Datum(Daten$DateTimeUTC) %in% da.Datum(all_dates))