Вы можете сделать это с помощью внешнего соединения.
list_of_dates = data_with_missing_dates %>%
select(month_year) %>%
distinct()
data_with_filled_dates = data_with_missing_dates %>%
right_join(list_of_dates, by = "month_year")
Это все стандартные команды dplyr
, поэтому dbplyr
может перевести их в bigquery.
Выше предполагается, что ваши существующие данные включают в себя все даты, которые вы хотите в конечном выводе (но распределенные по различным значениям идентификатора), следовательно, list_of_dates
может быть построено из вашего начального набора данных.
Если есть даты, которые не появляются ни для каких Идентификатор в ваших исходных данных, которые вы хотите отобразить в ваших окончательных данных, тогда вам нужно будет построить list_of_dates
другим способом. В этом случае даже complete()
само по себе будет недостаточно.
Редактировать, чтобы у каждого идентификатора были свои начало и конец
list_of_dates = data_with_missing_dates %>%
select(month_year) %>%
distinct() %>%
mutate(placeholder = 1)
date_limits = data_with_missing_dates %>%
group_by(ID) %>%
summarise(min_date = min(month_year),
max_date = max(month_year)) %>%
mutate(placeholder = 1)
data_with_filled_dates = date_limits %>%
outer_join(list_of_dates, by = "placeholder") %>%
filter(min_date <= month_year,
max_date >= month_year) %>%
select(ID, month_year) %>%
left_join(data_with_missing_dates, by = c("ID", "month_year"))