Ich benutze data.table und ich versuche, eine neue Spalte, genannt "Saison", die eine Spalte mit der entsprechenden Saison, z. B. Sommer, Winter erstellt. .. basierend auf einer Spalte namens "MonthName".Hinzufügen von Jahreszeiten Spalte zu Datentabelle basierend auf Monatsdaten
Ich frage mich, ob es eine effizientere Möglichkeit gibt, einer Datentabelle basierend auf Monatswerten eine Saisonspalte hinzuzufügen.
Dies ist die erste 6 von 300.000 Beobachtungen, angenommen, dass die Tabelle "dt" heißt.
rrp Year Month Finyear hourminute AvgPriceByTOD MonthName
1: 35.27500 1999 1 1999 00:00 33.09037 Jan
2: 21.01167 1999 1 1999 00:00 33.09037 Jan
3: 25.28667 1999 2 1999 00:00 33.09037 Feb
4: 18.42334 1999 2 1999 00:00 33.09037 Feb
5: 16.67499 1999 2 1999 00:00 33.09037 Feb
6: 18.90001 1999 2 1999 00:00 33.09037 Feb
Ich habe den folgenden Code versucht:
dt[, Season := ifelse(MonthName = c("Jun", "Jul", "Aug"),"Winter", ifelse(MonthName = c("Dec", "Jan", "Feb"), "Summer", ifelse(MonthName = c("Sep", "Oct", "Nov"), "Spring" , ifelse(MonthName = c("Mar", "Apr", "May"), "Autumn", NA))))]
Welche zurück:
rrp totaldemand Year Month Finyear hourminute AvgPriceByTOD MonthName Season
1: 35.27500 1999 1 1999 00:00 33.09037 Jan NA
2: 21.01167 1999 1 1999 00:00 33.09037 Jan Summer
3: 25.28667 1999 2 1999 00:00 33.09037 Feb Summer
4: 18.42334 1999 2 1999 00:00 33.09037 Feb NA
5: 16.67499 1999 2 1999 00:00 33.09037 Feb NA
6: 18.90001 1999 2 1999 00:00 33.09037 Feb Summer
ich den Fehler:
Warning messages:
1: In MonthName == c("Jun", "Jul", "Aug") :
longer object length is not a multiple of shorter object length
2: In MonthName == c("Dec", "Jan", "Feb") :
longer object length is not a multiple of shorter object length
3: In MonthName == c("Sep", "Oct", "Nov") :
longer object length is not a multiple of shorter object length
4: In MonthName == c("Mar", "Apr", "May") :
longer object length is not a multiple of shorter object length
Daneben, aus Gründen, die ich weiß nicht, einige der Sommermonate sind korrekt zugewiesen "Sommer", aber andere sind NA zugeordnet, z. B. Zeilen 1 und 2 sollten beide Sommer sein, aber anders zurückkehren.
Vielen Dank im Voraus!
Verwenden Sie 'MonthName% in% c (" Jun ", ...)', nicht '= ' – SymbolixAU
und es ist kein ** Fehler **, es ist eine ** Warnung ** – SymbolixAU
Es ist nicht ideal, da es erstellt und dann doppelte Ebenen, aber ich verwende in der Regel' cut' auf dem numerischen Monat: 'droplevels (cut (dt $ Monat, Pausen = c (0, 2, 5, 8, 11, 13), Labels = c ('Winter', 'Frühling', 'Sommer', 'Herbst', 'Winter')) ' – alistaire