Ich habe eine sehr große Datenmenge mit einer DateTime
Spalte, die POSIXct-Werte enthält. Ich muss die Jahreszeit (Winter - Sommer) basierend auf der Spalte DateTime
bestimmen. Ich habe eine Funktion erstellt, die auf einem kleinen Datensatz gut funktioniert, aber abstürzt, wenn ich sie auf dem großen Datensatz verwende. Kann jemand meinen Fehler sehen?Bestimmen Sie die Jahreszeit von Datum mit Lubridate in R
Ich habe 4 Funktionen erstellt:
- 3 Unterfunktionen so dass ich logische Vergleiche tun kann, und Auswahl mit * an Funktionen
- 1 Funktion der Saison
Hier sind zu bestimmen, die Funktionen:
require(lubridate)
# function for logical comparison (to be used in *apply)
greaterOrEqual <- function(x,y){
ifelse(x >= y,T,F)
}
# function for logical comparison (to be used in *apply)
less <- function(x,y){
ifelse(x < y,T,F)
}
# function for logical comparison (to be used in *apply)
selFromLogic <- function(VecLogic,VecValue){
VecValue[VecLogic]
}
# Main Function to determine the season
getTwoSeasons <- function(input.date) {
Winter1Start <- as.POSIXct("2000-01-01 00:00:00", tz = "UTC")
Winter1End <- as.POSIXct("2000-04-15 23:59:59", tz = "UTC")
SummerStart <- Winter1End + 1
SummerEnd <- as.POSIXct("2000-10-15 23:59:59", tz = "UTC")
Winter2Start <- SummerEnd + 1
Winter2End <- as.POSIXct("2000-12-31 00:00:00", tz = "UTC")
year(input.date) <- year(Winter1Start)
attr(input.date, "tzone") <- attr(Winter1Start, "tzone")
SeasonStart <- c(Winter1Start,SummerStart,Winter2Start)
SeasonsEnd <- c(Winter1End,SummerEnd,Winter2End)
Season_names <- as.factor(c("WinterHalfYear","SummerHalfYear","WinterHalfYear"))
Season_select <- sapply(SeasonStart, greaterOrEqual, x = input.date) & sapply(SeasonsEnd, less, x = input.date)
Season_return <- apply(Season_select,MARGIN = 1,selFromLogic,VecValue = Season_names)
return(Season_return)
}
Und hier ist ein Weg zu Testen Sie die Funktion:
dates <- Sys.time() + seq(0,10000,10)
getTwoSeasons(dates)
Ich wäre dankbar für jede Hilfe, das macht mich verrückt!