将季度日期更改为每月日期

时间:2020-03-26 17:14:00

标签: r date

我目前正尝试每1、4、7等月份减去2个月,以期在月底结束。

我目前正尝试每2、5、8等月份减去1个月 打算在月底结束。

我不想每3、6、9等减去任何月份...
我目前拥有的

month_df <- 
  tibble::tribble(
    ~V1, ~V2, ~V3,
    105, 20080331, -0.087372, 
    105,  20080331, -0.01609, 
    105,  20080331, -0.022895,
    105,  20080630, 0.083682,
    105,  20080630, 0.034749,
    105,  20080630, -0.11045,
    105,  20080930, -0.01594,
    105,  20080930, -0.02046,
    105,  20080930, -0.14796,
    )

我想实现的目标

month_df <- 
  tibble::tribble(
    ~V1, ~V2, ~V3,
    105, 20080131, -0.087372, 
    105,  20080229, -0.01609, 
    105,  20080331, -0.022895,
    105,  20080430, 0.083682,
    105,  20080530, 0.034749,
    105,  20080630, -0.11045,
    105,  20080731, -0.01594,
    105,  20080829, -0.02046,
    105,  20080930, -0.14796,
    )

1 个答案:

答案 0 :(得分:0)

定义一个函数no2ym,该函数将从问题中的数字日期格式转换为yearmon类,另一个函数ym2no则使用月末转换。

在使用no2ym之后,由于yearmon表示年/月按年+ 1表示年,0表示2月的1/12,依此类推,我们可以从中减去2:0/12。最后使用ym2no转换回来。

library(zoo)

no2ym <- function(x) as.yearmon(as.character(x), format = "%Y%m%d")
ym2no <- function(x) as.numeric(format(as.Date(x, frac = 1), "%Y%m%d"))

month_df %>%  mutate(V2 = ym2no(no2ym(V2) - 2:0/12))

给予:

# A tibble: 9 x 3
     V1       V2      V3
  <dbl>    <dbl>   <dbl>
1   105 20080131 -0.0874
2   105 20080229 -0.0161
3   105 20080331 -0.0229
4   105 20080430  0.0837
5   105 20080531  0.0347
6   105 20080630 -0.110 
7   105 20080731 -0.0159
8   105 20080831 -0.0205
9   105 20080930 -0.148