Генерация первого и последнего юлианского дня каждого месяца
Я хочу создать вектор начального и конечного дня каждого месяца для не високосного года (365 дней) в юлианских днях.
Что-то вроде
start.month <- c(1, 32, 60, .....)
end.month <- c(31, 59, 90, .....)
Как мне сделать это в R?
Я могу генерировать только месяцы года, используя это:
seq(as.Date("2001/1/1"), by = "month", length.out = 12)
Но как мне найти первый и последний юлианский день для каждого года?
2 ответа
Решение
Назовите свою последовательность дат первых новинок каждого месяца starts
, Затем определите ends = starts - 1
, Тогда юлианские дни format(c(starts, ends), "%j")
, Используйте 2002 для последовательности, чтобы предыдущий год не был високосным.
starts = seq(as.Date("2002/1/1"), by = "month", length.out = 12)
ends = starts - 1
x = as.numeric(format(c(starts, ends), "%j"))
sort(x)
# [1] 1 31 32 59 60 90 91 120 121 151 152 181 182 212 213 243 244 273 274 304 305
# [22] 334 335 365
Я бы использовал lubridate
library(lubridate)
dates <- seq(as.Date("2001/1/1"), by = "month", length.out = 12)
end_dates <- dates
day(end_dates) <- days_in_month(end_dates)
start_month <- yday(dates)
end_month <- yday(end_dates)
start_month
[1] 1 32 60 91 121 152 182 213 244 274 305 335
end_month
[1] 31 59 90 120 151 181 212 243 273 304 334 365
или если вы знаете, что это не високосный год, вы можете использовать
end_month <- c(1 + start_month[-1], 365)