Я ищу более простой способ обновления объекта временного ряда XTS с использованием данных в другом объекте XTS.Данные для перекрывающихся периодов времени и измерений должны быть обновлены, дополнительные периоды времени должны быть добавлены, а недостающие измерения ряда должны быть добавлены по мере необходимости.В настоящее время я использую комбинацию слияния, подмножества и назначения.Есть ли способ сделать это за меньшее количество шагов?
Пример
Два объекта серии xts времен с одним общим измерением (y) и двумя общими периодами времени (Q2 2018 и Q3 2018).
library(xts)
t <- as.yearqtr(paste(2018, 1:4, sep = ":Q"), format = "%Y:Q%q")
short <- xts(
matrix(1, ncol = 2, nrow = 2, dimnames = list(NULL, c("x", "y"))),
order.by = t[2:3]
)
long <- xts(
matrix(0, ncol = 2, nrow = 4, dimnames = list(NULL, c("y", "z"))),
order.by = t
)
short
x y
2018 Q2 1 1
2018 Q3 1 1
long
y z
2018 Q1 0 0
2018 Q2 0 0
2018 Q3 0 0
2018 Q4 0 0
Желаемый результат для случая 1: обновление short
с помощью long
x y z
2018 Q1 NA 0 0
2018 Q2 1 0 0
2018 Q3 1 0 0
2018 Q4 NA 0 0
Желаемый результат для случая 2: обновить long
с помощью short
x y z
2018 Q1 NA 0 0
2018 Q2 1 1 0
2018 Q3 1 1 0
2018 Q4 NA 0 0
Случай 1
Объединить неперекрывающиеся измерения, затем поднабор и назначить дляперекрывающиеся измерения (как в: Обновление объекта XTS )
short2 <- short
for (j in setdiff(colnames(long), colnames(short2))) {
short2 <- merge(short2, long[, j])
}
short3 <- short2
for (j in intersect(colnames(short3), colnames(long))) {
short3[index(long), j] <- long[, j]
}
short3
x y z
2018 Q1 NA 0 0
2018 Q2 1 0 0
2018 Q3 1 0 0
2018 Q4 NA 0 0
Случай 2
Тот же подход: объединить для непересекающихся измерений рядов, затем подналожить и назначить дляперекрывающиеся размеры
long2 <- long
for (j in setdiff(colnames(short), colnames(long2))) {
long2 <- merge(long2, short[, j])
}
long3 <- long2
for (j in intersect(colnames(short), colnames(long3))) {
long3[index(short), j] <- short[, j]
}
long3
y z x
2018 Q1 0 0 NA
2018 Q2 1 0 1
2018 Q3 1 0 1
2018 Q4 0 0 NA
Есть ли что-нибудь попроще, чем этот двухэтапный процесс?Возможно, функция или опция из другого пакета.