Проблема в том, что в вашем наборе данных нет ежедневных данных. Функция apply.monthly
взята из xts, но tidyquant использует обертки для множества функций, поэтому они работают более аккуратно. apply.monthly
нужен объект xts, который представляет собой матрицу с указателем времени.
Также знайте, что apply.monthly возвращает последний доступный день месяца в ваших временных рядах. Глядя на ваш пример, последний день, когда он вернется в июле 2017 года, будет 27-го. Теперь, если у вас есть 5 записей (недель) в месяц, средняя функция сделает это за 5 записей. Это никогда не будет ровно 1 месяц, так как еженедельные данные никогда не охватывают месячные данные.
Но с помощью tidyquant вы можете получить своего рода ежемесячный результат с ID1 и ID2 с вашими данными, если вы объедините результат с исходными данными. Смотрите код ниже. Я не удалил ненужные столбцы.
df1 %>%
tq_transmute(select = c(value, ID1),
mutate_fun = apply.monthly,
FUN = mean) %>%
mutate(DATE_ = as.Date(DATE_)) %>%
inner_join(df1, by = "DATE_")
# A tibble: 3 x 5
DATE_ value.x ID1 ID2 value.y
<date> <dbl> <fct> <fct> <dbl>
1 2014-06-29 176. 00001 436 176.
2 2014-07-27 176. 00001 436 185.
3 2014-08-03 180. 00001 436 180.
данные:
df1 <- data.frame(ID1 = rep("00001", 6),
ID2 = rep("436", 6),
DATE_ = as.Date(c("2014-06-29", "2014-07-06", "2014-07-13", "2014-07-20", "2014-07-27", "2014-08-03")),
value = c(175.8164,188.9264,167.5376,160.7907,185.3018,179.5748)
)