Мои данные находятся в формате data.frame, таком как данные примера:
data <- 
structure(list(Article = structure(c(1L, 1L, 3L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L
), .Label = c("10004", "10006", "10007"), class = "factor"), 
Demand = c(26L, 780L, 2L, 181L, 228L, 214L, 219L, 291L, 104L, 
72L, 155L, 237L, 182L, 148L, 52L, 227L, 2L, 355L, 2L, 432L, 
1L, 156L), Week = c("2013-W01", "2013-W01", "2013-W01", "2013-W01", 
"2013-W01", "2013-W02", "2013-W02", "2013-W02", "2013-W02", 
"2013-W02", "2013-W03", "2013-W03", "2013-W03", "2013-W03", 
"2013-W03", "2013-W04", "2013-W04", "2013-W04", "2013-W04", 
"2013-W04", "2013-W04", "2013-W04")), .Names = c("Article", 
"Demand", "Week"), class = "data.frame", row.names = c(NA, -22L))
Я хотел бы обобщить колонку спроса за неделю и статью. Для этого я использую:
library(dplyr)
WeekSums <- 
  data %>%
   group_by(Article, Week) %>%
   summarize(
    WeekDemand = sum(Demand)
   )
Но поскольку некоторые статьи не были проданы в определенные недели, количество строк на статью отличается (только недели с продажами показаны в DataSrams WeekSums). Как я могу настроить свои данные так, чтобы каждая статья имела одинаковое количество строк (по одной на каждую неделю), в том числе недели с требованием 0?
Результат должен выглядеть следующим образом:
  Article     Week WeekDemand
1   10004 2013-W01       1215
2   10004 2013-W02        900
3   10004 2013-W03        774
4   10004 2013-W04       1170
5   10006 2013-W01        0
6   10006 2013-W02        0
7   10006 2013-W03        0
8   10006 2013-W04         5
9   10007 2013-W01         2
10   10007 2013-W02        0
11   10007 2013-W03        0
12   10007 2013-W04        0
Я пробовал
WeekSums %>%
  group_by(Article) %>%
  if(n()< 4) rep(rbind(c(Article,NA,NA)), 4 - n() )
но это не работает. В моем первоначальном подходе я решил эту проблему, объединив фрейм данных недельных чисел 1-4 с моим файлом rawdata для каждой статьи. Таким образом, у меня есть 4 недели (строки) для каждой статьи, но реализация с циклом for очень неэффективна, и поэтому я пытаюсь сделать то же самое с dplyr (или любым другим более эффективным пакетом/функцией). Любые предложения будут высоко оценены!