Полное присоединение к dplyr - PullRequest
0 голосов
/ 28 мая 2020

У меня есть фрейм данных, который выглядит так:

library(tidyverse) 
df <- tibble::tribble(
        ~sub_date, ~period,
        "2019-01",       1,
        "2019-01",       2,
        "2019-01",       3,
        "2019-02",       1,
        "2019-02",       2,
        "2019-03",       1,
        "2019-03",       2,
        "2019-03",       3,
        "2019-03",       4
        )

  sub_date period
  <chr>     <dbl>
1 2019-01       1
2 2019-01       2
3 2019-01       3
4 2019-02       1
5 2019-02       2
6 2019-03       1
7 2019-03       2
8 2019-03       3
9 2019-03       4

и еще один:

period <- tibble::tribble(
            ~period, ~forecast,
                  1,        10,
                  2,        20,
                  3,        30,
                  4,        40,
                  5,        50,
                  6,        60,
                  7,        70
            )


  period forecast
   <dbl>    <dbl>
1      1       10
2      2       20
3      3       30
4      4       40
5      5       50
6      6       60
7      7       70

Я изо всех сил пытаюсь присоединиться к ним таким образом, чтобы в df я мог заполнить отсутствующие периодов в таблице period, иначе говоря, количество строк в period X различных sub_date в df.

следующим образом:

df_output <- tibble::tribble(
               ~sub_date, ~period, ~forecast,
               "2019-01",       1,        10,
               "2019-01",       2,        20,
               "2019-01",       3,        30,
               "2019-01",       4,        40,
               "2019-01",       5,        50,
               "2019-01",       6,        60,
               "2019-01",       7,        70,
               "2019-02",       1,        10,
               "2019-02",       2,        20,
               "2019-02",       3,        30,
               "2019-02",       4,        40,
               "2019-02",       5,        50,
               "2019-02",       6,        60,
               "2019-02",       7,        70,
               "2019-03",       1,        10,
               "2019-03",       2,        20,
               "2019-03",       3,        30,
               "2019-03",       4,        40,
               "2019-03",       5,        50,
               "2019-03",       6,        60,
               "2019-03",       7,        70
               )

# A tibble: 21 x 3
   sub_date period forecast
   <chr>     <dbl>    <dbl>
 1 2019-01       1       10
 2 2019-01       2       20
 3 2019-01       3       30
 4 2019-01       4       40
 5 2019-01       5       50
 6 2019-01       6       60
 7 2019-01       7       70
 8 2019-02       1       10
 9 2019-02       2       20
10 2019-02       3       30
# … with 11 more rows

Я предположил, что это был полный присоединяйтесь, но я не получаю желаемого результата.

Есть помощь?

Ответы [ 2 ]

1 голос
/ 28 мая 2020

вы можете использовать tidyr::crossing, чтобы получить желаемый результат:

crossing(select(df, sub_date), period)

Обратите внимание, что вы не ищете join, так как вы хотите, чтобы каждая комбинация sub_date была объединена (или скрещена) с каждая комбинация period и forecast.

0 голосов
/ 28 мая 2020

Можно попробовать объединить таблицы? Попробуйте это, чтобы узнать, дает ли он то, что вам нужно?

df <- df %>% distinct(sub_date) answer <- merge(periods, df, all = TRUE)

...