Determine season from Date using lubridate in R

后端 未结 6 2065
刺人心
刺人心 2020-12-16 04:46

I have a very big dataset with a DateTime Column containing POSIXct-Values. I need to determine the season (Winter - Summer) based on the DateTime

6条回答
  •  情深已故
    2020-12-16 05:46

    Use the POSXlt instead of POSXct.

    I made my own function depending on the definition of seasons that I am using. I created vectors named normal for a non-leap year and leap for leap year with each season name repeated the no. of times it appears starting from Jan 1. And created the following function.

    SEASON <- function(datee){
      
      datee <- as.POSIXlt(datee)
      season <- vector()
      normal <- rep(c("Winter","Spring","Summer","Monsoon","Autumn","Winter"), c(46,44,91,77,76,31))
      leap <- rep(c("Winter","Spring","Summer","Monsoon","Autumn","Winter"), c(46,45,91,77,76,31))
    
      
      if(leap_year(year(datee)) == FALSE){
        season <- normal[datee$yday+1]
      } else {
        season <- leap[datee$yday+1]
      }
      return(season)
    }
    

    Let's put it to test for some dataset.

    Dates <- seq(as.POSIXct("2000-01-01"), as.POSIXct("2010-01-01"), by= "day")
    sapply(Dates, SEASON)
    

    It works.

提交回复
热议问题