Есть ли способ подмножества данных XTS путем сопоставления приблизительных дат в R? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть еженедельные данные временных рядов, которые я пытаюсь использовать для анализа с ежемесячной периодичностью.

Я хотел бы использовать значение, близкое к 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?

Есть ли лучший способ сделать то, что я пытаюсь сделать?

Соответственно, если я пытаюсь объединить еженедельные и ежемесячные данные временных рядов, есть ли способ объединить приблизительные даты?

Действительно признателен за любую помощь здесь!

Редактировать: добавлены некоторые репрезентативные данные и исправлена ​​формула «корректировки»

...