Преобразование квартальных данных в ежемесячные данные и объединение с использованием R - PullRequest
1 голос
/ 25 марта 2020

В настоящее время я пытаюсь выяснить, как преобразовать квартальные данные в месячные данные с использованием R, поскольку я хочу объединить свои данные о месячной доходности с квартальными сводными данными.

То, что у меня есть в настоящее время.

Quarterly Dataset

105  20080331 Y Y N N EQ  

Monthly Dataset

105  20080131 -0.087372  
105  20080229 -0.01609  
105  20080331 -0.022895  

Чего я хочу достичь.

105  20080131 -0.087372 Y Y N N EQ  
105  20080229 -0.01609  Y Y N N EQ  
105  20080331 -0.022895 Y Y N N EQ  

Мне придется выполнить это для более 350000 отдельных строк что я, почему я ищу помощь. Я предполагаю, что значения квартала совпадают с предыдущими 3 месяцами.

Обновление

Спасибо за быстрый и полезный ответ. Однако я ошибся в форматировании.

Y1 может принимать 3 уровня, а именно "", "Y", "N".
Y2 может принимать 3 уровня, а именно "", "Y", "N".
N1 может принимать 4 уровня, а именно "", "B", "D", "E".
N2 может принимать 3 уровня, а именно "", "F", "N".
V is Возврат, который может принять на любом уровне.

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

https://i.stack.imgur.com/MYE3w.png

https://i.stack.imgur.com/SQBY1.png

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Создать данные:

quart_df <- 
  tibble::tribble(
    ~V1, ~V2, ~V3, ~V4, ~V5, ~V6, ~V7,
    105, "20080331", "Y", "Y", "N", "N", "EQ"
  )

month_df <- 
  tibble::tribble(
    ~V1, ~V2, ~V3,
    105,  20080131, -0.087372, 
    105,  20080229, -0.01609, 
    105,  20080331, -0.022895
  )

Присоединиться, используя dplyr::full_join():

library(dplyr)

full_join(month_df,
          select(quart_df, -V2),
          by = c("V1" = "V1"))
#> # A tibble: 3 x 8
#>      V1       V2    V3.x V3.y  V4    V5    V6    V7   
#>   <dbl>    <dbl>   <dbl> <chr> <chr> <chr> <chr> <chr>
#> 1   105 20080131 -0.0874 Y     Y     N     N     EQ   
#> 2   105 20080229 -0.0161 Y     Y     N     N     EQ   
#> 3   105 20080331 -0.0229 Y     Y     N     N     EQ
0 голосов
/ 26 марта 2020

Вы можете использовать merge:

Quarterly <- data.frame(Q=105, D=20080331, Y1="Y", Y2="Y", N1="N",  N2="N", E="EQ")

Monthly <- data.frame(Q = c(105,105,105),
                      D = c(20080131, 20080229, 20080331),
                      V = c(-0.087372,-0.01609, -0.022895))
merge(Monthly, Quarterly[,-2])

ИЛИ

merge(Monthly, Quarterly[,-which(names(Quarterly) == "D")])

Будет выводить тот же результат:

    Q        D         V Y1 Y2 N1 N2  E
1 105 20080131 -0.087372  Y  Y  N  N EQ
2 105 20080229 -0.016090  Y  Y  N  N EQ
3 105 20080331 -0.022895  Y  Y  N  N EQ

PS. В следующий раз, пожалуйста, отправьте вопрос в воспроизводимом формате

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