将季度数据转换为每月数据并使用R

时间:2020-03-25 20:01:16

标签: r

由于我想将我的月度回报数据与季度摘要数据合并,因此我目前正试图找出如何使用R将季度数据转换为每月数据的方法。

我目前有什么。

季度数据集

105  20080331 Y Y N N EQ  

每月数据集

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个单独的行,这就是我寻求帮助的原因。我假设季度值与前三个月相同。

更新

感谢您快速有效的回复。但是,我在格式化上犯了一个错误。

Y1可以分为三个级别,即“”,“ Y”,“ N”。 Y2可以采用3个级别,即“”,“ Y”,“ N”。
N1可以分为4个级别,即“”,“ B”,“ D”,“ E”。
N2可以分为3个级别,即“”,“ F”,“ N”。
V是可以采用任何水平的收益。

我的数据范围也从2008年1月到2019年12月。我相信这会使问题变得更加复杂。

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

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

2 个答案:

答案 0 :(得分:1)

创建数据:

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

答案 1 :(得分:0)

您可以使用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。下次,请在reproductible format

中提交问题