Я видел много вопросов в SO о преобразовании ежедневных данных в еженедельные с использованием пакетов xts
, zoo
или lubridate
. Ни один из ответов не был найден подходящим для моей проблемы. Я попробовал следующий код
library(zoo)
library(lubridate)
library(xts)
library(tidyverse)
#Calculation for multistation
set.seed(123)
df <- data.frame("date"= seq(from = as.Date("1970-1-1"), to = as.Date("2000-12-31"), by = "day"),
"Station1" = runif(length(seq.Date(as.Date("1970-1-1"), as.Date("2000-12-31"), "days")), 10, 30),
"Station2" = runif(length(seq.Date(as.Date("1970-1-1"), as.Date("2000-12-31"), "days")), 11, 29),
"Station3" = runif(length(seq.Date(as.Date("1970-1-1"), as.Date("2000-12-31"), "days")), 9, 28))
head(df)
# Aggregate over week
df %>%
mutate(Week = week(ymd(date)),
Year = year(ymd(date))) %>%
pivot_longer(-c(Week, date, Year), values_to = "value", names_to = "Station") %>%
group_by(Year, Week, Station) %>%
summarise(Weekly = mean(value)) %>%
arrange(Station) %>%
print(n = 55)
Из результатов вы можете видеть, что 1970 охватывает 53 недели, которые я не хочу. Я хочу начать неделю с первого числа каждого года, и 52-я неделя должна иметь 8 дней в не високосном году, а в случае високосных годов 9-я и 52-я недели должны иметь 8 дней, чтобы каждый год содержал только 52 недели. Как это сделать в R?