首页 > 解决方案 > R:按日和月将季节分配给日期

问题描述

我有一个数据框,其中包含多年的日期。它看起来像这样(而不是三年,我有 40 年):

DATES<-c(seq(as.Date('2017-01-01'), as.Date('2019-12-31'), by = 'days'))
df<-data.frame(DATES)

对于我想添加季节的每一天。因此,春季应从 3 月 20 日开始,夏季从 6 月 21 日开始,秋季从 9 月 23 日开始,冬季从 12 月 21 日开始。这些日期多年来保持不变。

我想出了以下代码,它有效(至少,我认为是这样)。但是,我想知道,如果没有更优雅的方式来获得我想要的东西。

df$MONTH<-month(df$DATES)
df$DAY<-mday(df$DATES)
df$DAY_PLUS_MONTH<-df$DAY+df$MONTH*100

df <- df %>%
  mutate(SEASON = case_when(
    DAY_PLUS_MONTH %in% 320:620 ~ 'SPRING',
    DAY_PLUS_MONTH %in% 621:922 ~ 'SUMMER',
    DAY_PLUS_MONTH %in% 923:1221 ~ 'AUTUMN',
    TRUE ~ 'WINTER'))

标签: r

解决方案


我认为这应该适合你:

cut(lubridate::yday(df$DATES - lubridate::days(79)), 
    breaks = c(0, 93, 187, 276, Inf), 
    labels = c("Spring", "Summer", "Autumn", "Winter"))

推荐阅读