首页 > 解决方案 > 将季度日期更改为月度日期

问题描述

我目前正在尝试每 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,
    )

标签: rdate

解决方案


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

使用 后no2ym,由于 yearmon 表示年/月,每年 + 0 表示一月,年 + 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 

推荐阅读