我正在处理水文数据,我需要水年。我已经根据之前在此论坛上发布的功能成功创建了一个水年专栏。我想要的是有一个陪伴water day
范围从 1-365(闰年为 366)以匹配水年序列。请注意,水年是由其结束的日历年指定的。例如,2010水年从2009年10月1日开始,到2010年9月30日结束。
基本上,我想要一个列,每当日期达到每年的 10 月 1 日时,该列就从 1-365(闰年为 366)开始序列。
我的数据集范围从 1950 年到 2099 年,因此我需要某种方式来自动化此过程。这个问题的闰年部分给我带来了麻烦。
我在下面提供了代码来创建数据集。
# Create a data_set with datetime, year, month, day, jd, wtr_yr
library(lubridate)
datetime <- seq(as.Date("1950/1/1"), as.Date("2099/12/31"), by = "day")
year <- year(datetime)
month <- month(datetime)
day <- day(datetime)
julian_day <- yday(datetime)
# make dataframe with all time components
datetime_dataframe <- data.frame(datetime, year, month, day, julian_day)
# Create function to derive water year. Credit goes to Caner and MrFlick.
wtr_yr <- function(dates, start_month=10) {
# Convert dates into POSIXlt
dates.posix = as.POSIXlt(dates)
# Year offset
offset = ifelse(dates.posix$mon >= start_month - 1, 1, 0)
# Water year
adj.year = dates.posix$year + 1900 + offset
# Return the water year
adj.year
}
# Use fn to add water year to the dataframe
datetime_dataframe$wtr_yr <-wtr_yr(datetime_dataframe$datetime)
head(datetime_dataframe)