R сделать индекс с дневными сериями в виде строковых данных?

У меня есть строковые данные со следующей характеристикой
c = ("19790102", "19790103", "19790104", "19790105",...).

Теперь я хочу сделать индекс для разных сезонов (лето, осень, зима, весна). Мне удалось сделать это всего за один месяц (например, сентябрь):

ind_september=which(as.numeric(substr(dayserie[],5,6))==9)

Но я понятия не имею, как это сделать с несколькими месяцами, чтобы получить индекс для сезонов.

У кого-нибудь есть идея?


person user2882752    schedule 15.10.2013    source источник
comment
возможно, вы найдете свой ответ здесь: link   -  person thijs van den bergh    schedule 15.10.2013


Ответы (2)


Используя Найти, к какому сезону относится конкретная дата, я ловко измените функцию, чтобы добавить аргумент формата:

getSeason <- function(DATES,frmt = "%Y%m%d") {
  WS <- as.POSIXct("2012-12-21", format = "%Y-%m-%d") # Winter 
  SE <- as.POSIXct("2012-3-21",  format = "%Y-%m-%d") # Spring 
  SS <- as.POSIXct("2012-6-21",  format = "%Y-%m-%d") # Summer 
  FE <- as.POSIXct("2012-9-21",  format = "%Y-%m-%d") # Autumn 

  # Convert dates from any year to 2012 dates
  d <- strftime(as.POSIXct(DATES, format=frmt),
                format='2012-%m-%d')

  ifelse (d >= WS | d < SE, "Winter",
          ifelse (d >= SE & d < SS, "Spring",
                  ifelse (d >= SS & d < FE, "Summer", "Fall")))
}

dayserie <- c("19790102", "19790103", "19790104", "19790105")
getSeason(dayserie,'%Y%m%d')

"Winter" "Winter" "Winter" "Winter"
person agstudy    schedule 15.10.2013

Вы также можете проверить пакет seas.

library(seas)

x <- c("19790304", "19790603", "19790903",  "19791205")

x2 <- as.Date(x, format = "%Y%m%d")

# width = "JFM": annual quarterly divisions: JFM, AMJ, JAS, OND
x3 <- mkseas(x2, width = "JFM")
x3
# [1] JFM AMJ JAS OND

# if you wish to rename factor levels
x4 <- factor(x3, labels = c("winter", "spring", "summer", "autumn"))
x4
# [1] winter spring summer autumn

# alternative division
# width = "DJF": meteorological quarterly divisions: DJF, MAM, JJA, SON
x3 <- mkseas(x2, width = "DJF")
x3
# [1] MAM JJA SON DJF

x4 <- factor(x3, labels = c("winter", "spring", "summer", "autumn"))
x4
# [1] spring summer autumn winter
person Henrik    schedule 15.10.2013