1) dplyr Предполагая, что ввод DF
воспроизводимо показан в примечании в конце справа, присоедините DF
к фрейму данных недель, а затем замените значения NA на ноль. В кадре данных в примечании в конце value
является целым числом, но если оно равно удвоению в вашем приложении, тогда используйте 0 вместо 0L.
library(dplyr)
DF %>%
right_join(data.frame(date = seq(first(.$date), last(.$date), 7))) %>%
mutate(value = coalesce(value, 0L))
2) zoo Поскольку это временные ряды, многие вычисления можно упростить, используя представление временных рядов. Конвертируя в объект zoo z
, мы можем использовать этот однострочник, который конвертирует из zoo в ts и обратно, что дает эффект вставки значений NA. Так как класс ts не может представлять даты напрямую, мы используем агрегат для преобразования обратно в Date и затем na.fill для замены NA на 0.
library(zoo)
z <- read.zoo(DF, frequency = 7)
na.fill(aggregate(as.zoo(as.ts(z)), as.Date, c), 0)
Это также может быть записано как:
library(magrittr)
z %>% as.ts %>% as.zoo %>% aggregate(as.Date, c) %>% na.fill(0)
Примечание
Lines <- "2013-10-6 1
2014-08-03 1
2014-10-12 1"
DF <- read.table(text = Lines, col.names = c("date", "value"))
DF$date <- as.Date(DF$date)