У меня есть еженедельные данные временных рядов, которые я пытаюсь использовать для анализа с ежемесячной периодичностью.
Я хотел бы использовать значение, близкое к 7 дням до даты окончания месяца.
С этой целью моя цель состоит в том, чтобы вектор позиций индекса соответствовал показаниям, ближайшим к моим целевым датам. Аналогично функции "конечных точек" в xts, но с определенные точки за период. Не только конец периода.
Я думаю, что смог приблизиться к ответу, но чувствую, что должен быть более легкий путь.
Мои данные выглядят так:
dates <- seq(from = as.Date("2015/12/22", by='7 days', to = as.Date("2020/04/28")
n <- length(dates) #should be 228
data <- rnorm(n) #creating some data
xts <- xts(data, order.by=dates) #creating time series object
Я начинаю с создания последовательности дат за 7 дней до конца месяца и
EOM = dates
day(EOM) <- days_in_month(dates) #from lubridate.
TargetDates <- EOM - 7 #this is the set of target dates
Затем вычисляю расстояние от даты моих еженедельных данных до целевых дат, и я добавляю его к своему объекту временного ряда
distance = abs(TargetDates - dates)
xts$distance <- distance
Затем я извлекаю расположение дат, ближайших к МНВ-7, в течение каждого месяца. И я сравниваю это с ежемесячными конечными точками в моем объекте временного ряда. если месячная конечная дата минимизирует расстояние, отлично. Если нет, то я корректирую свои значения индекса.
monthlyidx <- apply.monthly(xts$distance, which.min)
#this a series of usually 3s and 4s (3rd or 4th observation in a mth minimizes distance)
endpoints <- endpoints(xts$distance, on = 'months')[-1]
obspermonth <- apply.monthly(xts$distance, length)
adjustment <- obspermonth - monthlyidx
finalindex <- endpoints - adjustment #this is the index that I want
#then I can access the data at these index points
xts$data[finalindex,]
Кажется, это работает, но я чувствую, что это очень затянуто. Есть ли что-то вроде «поиска диапазона» для использования терминологии Excel?
Есть ли лучший способ сделать то, что я пытаюсь сделать?
Соответственно, если я пытаюсь объединить еженедельные и ежемесячные данные временных рядов, есть ли способ объединить приблизительные даты?
Действительно признателен за любую помощь здесь!
Редактировать: добавлены некоторые репрезентативные данные и исправлена формула «корректировки»