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 der for 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.

InformationsquelleAutor jirikadlec2 | 2014-02-05
Schreibe einen Kommentar