Ich habe einen großen Datensatz (> 3k Zeilen), den ich basierend auf dem geografischen Standort und dem Datum filtern möchte. Die Lage Filterung funktioniert gut, aber ich bekomme die folgende Fehlermeldung angezeigt, wenn logische Operatoren auf Daten unter Verwendung von mit filter
(dplyr
):Daten in R mit dplyr filtern
Error: level sets of factors are different
meine aktuellen Codes ist wie folgt:
head(master.data)
State.Name County.Code Latitude Longitude Arithmetic.Mean Date.Local
1 Alabama 3 30.49748 -87.88026 8.0 2014-01-02
2 Alabama 3 30.49748 -87.88026 7.0 2014-01-05
3 Alabama 3 30.49748 -87.88026 7.0 2014-01-08
4 Alabama 3 30.49748 -87.88026 3.6 2014-01-11
5 Alabama 3 30.49748 -87.88026 5.2 2014-01-14
6 Alabama 3 30.49748 -87.88026 4.4 2014-01-17
master.data$Date.Local <- as.Date(master.data$Date.Local, format = "%Y-%m-%d")
site.info <- data.frame("Alabama", 3, 30, 90, "28/12/2015", "13/07/2016")
names(site.info) <- c("State.Name", "County.Code", "Latitude", "Longitude",
"Date.Start", "Date.End")
site.info$Date.Start <- as.Date(site.info$Date.Start, format = "%d/%m/%Y")
site.info$Date.End <- as.Date(site.info$Date.End, format = "%d/%m/%Y")
reduced.data <- filter(master.data, State.Name == site.info$State.Name,
Date.Local >= site.info$Date.Start
& Date.Local <= site.info$Date.End)
Beide site.info
und master.data
haben die Daten formatiert mit as.Date
. Das Eingabeformat ist anders, da sie aus externen Quellen importiert werden.
Ich bin in der Lage, logische Operationen auf den beiden mit den erwarteten Ergebnissen außerhalb von filter
durchzuführen. Nicht sicher, warum das der Fall ist. Mit %in%
die gleichen Ergebnisse
Date.Local %in% c(site.info$Date.Start, site.info$Date.End)
Wie Ausbeuten kann ich dies funktioniert?
Ich denke, Ihre 'State.Name == site.info $ State.Name' kann beunruhigend sein, wenn es mehr Elemente in 'site.info' gibt und es sich um eine' factor' Klasse handelt. Sie können eine 'Join' versuchen. Dies kann einfacher mit 'data.table' durchgeführt werden, zB' setDT (master.data) [site.info, on =. (State.Name, Date.Local> = Date.Start, Date.Local <= Date.End)] ' – akrun
Ich werde das auch versuchen. 'site.info' hat nicht mehr als 12 Zeilen und die Daten werden mit' as.Date' formatiert, also bin ich neugierig, warum es nicht funktioniert. – Gautam
Ihre State.Name-Spalte ist wahrscheinlich ein Faktor - mit unterschiedlichen Ebenen in jedem data.frame. Wenn Sie 'dput (head (master.data))' in Ihre Frage aufnehmen, können wir das sicher wissen. Wenn Sie diese Spalte nicht als Faktor haben wollen, lassen Sie sie nicht eins werden. EG benutze 'stringsAsFactors = FALSE' in' read.table' –