Как объединить фреймы данных, выбрав поле из 2-го фрейма данных, основываясь на порядке дат в первом фрейме данных - PullRequest
1 голос
/ 14 мая 2019

У меня есть 2 кадра данных, один с идентификаторами компании и 12 месяцев для каждой компании (все 12 месяцев последовательны, но для каждой компании существует разная последовательность месяцев), и больший кадр данных с идентификаторами компании, все возможные месяцы и 12различные поля доходов для каждого месяца и комбинации компаний.

Я хочу объединить их, чтобы у меня был информационный кадр с идентификаторами компаний и 12 датами для каждой компании, но только одно поле дохода для каждой компании и комбинации дат.Поле дохода, которое я хочу включить, зависит от порядка поля месяца в первом кадре данных. Надеюсь, приведенный ниже пример объясняет это.

Я попытался просто объединить кадры данных, но затем я получил 12 сумм дохода за каждыйкомбинация компании и месяца.

Ниже приведен пример, в котором для каждой компании используется всего 2 месяца, так как, надеюсь, этого достаточно, чтобы показать, что я хотел бы сделать (я использую lubridate для создания дат в этом примере).

companies <- data.frame(
  Name   = c( rep("Company1",2), rep("Company2",2)),
  Month = c(ymd("2016-09-01"),
            ymd("2016-10-01"),
            ymd("2017-12-01"),
            ymd("2018-01-01")
            )
)

revenues <- data.frame(
  Name   = c( rep("Company1",5), rep("Company2",5)),
  Month = c(
    rep(
      c(
        ymd("2016-09-01"),
        ymd("2016-10-01"),
        ymd("2016-11-01"),
        ymd("2017-12-01"),
        ymd("2018-01-01")
      ), 2)
  ),
  RollingRev1 = c(1000, 850, 900, 950, 875, 2350, 1900, 2200, 2150, 2400),
  RollingRev2 = c(1700, 1850, 1750, 1850, 1825, 4500, 4250, 4100, 4350, 4550)
)

Итак, это мои начальные кадры данных:

companies
      Name      Month
1 Company1 2016-09-01
2 Company1 2016-10-01
3 Company2 2017-12-01
4 Company2 2018-01-01

revenues
       Name      Month RollingRev1 RollingRev2
1  Company1 2016-09-01        1000        1700
2  Company1 2016-10-01         850        1850
3  Company1 2016-11-01         900        1750
4  Company1 2017-12-01         950        1850
5  Company1 2018-01-01         875        1825
6  Company2 2016-09-01        2350        4500
7  Company2 2016-10-01        1900        4250
8  Company2 2016-11-01        2200        4100
9  Company2 2017-12-01        2150        4350
10 Company2 2018-01-01        2400        4550

Я хочу закончить следующим кадром данных

      Name      Month Revenue
1 Company1 2016-09-01    1000 [this is RollingRev1 as it is the 1st month]
2 Company1 2016-10-01    1850 [this is RollingRev2 as it is the 2nd month]
3 Company2 2017-12-01    2150 [this is RollingRev1 as it is the 1st month]
4 Company2 2018-01-01    4550 [this is RollingRev2 as it is the 2nd month]

Все остальные месяцы и поля доходаигнорируются.Действительно, критически важным является начальный месяц для каждой компании, поскольку он определяет последовательность месяцев и выбранные поля дохода для каждого месяца, но я не знаю, как использовать этот факт для правильного объединения кадров данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...