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