r - 将季度日期更改为月度日期
问题描述
我目前正在尝试每 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,
)
解决方案
定义一个函数,该函数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
推荐阅读
- typescript - 从打字稿中的动态数组创建字符串文字类型
- python - 请求问题(获取)
- sql-server - 使用 Azure Data Studio 备份和还原 Azure 数据库
- vue.js - 将数据传递给另一个元素并能够对其进行编辑
- javascript - TypeError:使用axios获取数据时language.map不是函数
- jwt - Blazor WASM 避免默认声明映射
- javascript - 如何在 Javascript 中按键合并数组和分组?
- pandas - 如何在直方图中制作类型列的百分比?
- javascript - 实现 Vuetify 分页组件
- sql - 如何与特定范围的记录求和