R:把几个月变成季度
R: Turn Months into Quarters
我有一个如下所示的数据集:
> ex
# A tibble: 10 × 2
tenor delivery_window
<chr> <chr>
1 month Nov 22
2 quarter Jan 22
3 year Cal 24
4 year Cal 22
5 month Feb 22
6 quarter Jan 21
7 month Sep 22
8 quarter Jan 21
9 month Jun 21
10 month Aug 21
我想把它变成这样的东西:
> ex
# A tibble: 10 × 3
tenor delivery_window new_tenor
<chr> <chr> <chr>
1 month Nov 22 Nov 22
2 quarter Jan 22 Q1 22
3 year Cal 24 Cal 24
4 year Cal 22 Cal 22
5 month Feb 22 Feb 22
6 quarter Jan 21 Q1 21
7 month Sep 22 Sep 22
8 quarter Jan 21 Q1 21
9 month Jun 21 Jun 21
10 month Aug 21 Aug 21
也就是说,如果tenor
是quarter
,我只想显示delivery window
对应的季度,而不是月份。每月和每年的期限可以保持不变。
有人可以给我一个关于如何实现这个的提示吗?提前谢谢你。
编辑
对于从一月到三月的月份,new_tenor
应该是 Q1 YY
,对于从 Apr YY
到 Jun YY
的月份,Q2 YY
,Q3 YY
从 Jul YY
到 Sep YY
的月份,以及 Q4 YY
从 Oct YY
到 Dec YY
的月份。
我们可以用as.yearqtr
转换成yearqtr
(从zoo
),然后用case_when
用转换后的值替换'delivery_window'中的元素
library(dplyr)
library(stringr)
library(zoo)
ex <- ex %>%
mutate(new_tenor = case_when(tenor == 'quarter'
~ str_replace(as.yearqtr(paste('1', delivery_window),
'%d %b %Y'), "(\d+) (\w+)", "\2 \1")
, TRUE ~ delivery_window))
我有一个如下所示的数据集:
> ex
# A tibble: 10 × 2
tenor delivery_window
<chr> <chr>
1 month Nov 22
2 quarter Jan 22
3 year Cal 24
4 year Cal 22
5 month Feb 22
6 quarter Jan 21
7 month Sep 22
8 quarter Jan 21
9 month Jun 21
10 month Aug 21
我想把它变成这样的东西:
> ex
# A tibble: 10 × 3
tenor delivery_window new_tenor
<chr> <chr> <chr>
1 month Nov 22 Nov 22
2 quarter Jan 22 Q1 22
3 year Cal 24 Cal 24
4 year Cal 22 Cal 22
5 month Feb 22 Feb 22
6 quarter Jan 21 Q1 21
7 month Sep 22 Sep 22
8 quarter Jan 21 Q1 21
9 month Jun 21 Jun 21
10 month Aug 21 Aug 21
也就是说,如果tenor
是quarter
,我只想显示delivery window
对应的季度,而不是月份。每月和每年的期限可以保持不变。
有人可以给我一个关于如何实现这个的提示吗?提前谢谢你。
编辑
对于从一月到三月的月份,new_tenor
应该是 Q1 YY
,对于从 Apr YY
到 Jun YY
的月份,Q2 YY
,Q3 YY
从 Jul YY
到 Sep YY
的月份,以及 Q4 YY
从 Oct YY
到 Dec YY
的月份。
我们可以用as.yearqtr
转换成yearqtr
(从zoo
),然后用case_when
用转换后的值替换'delivery_window'中的元素
library(dplyr)
library(stringr)
library(zoo)
ex <- ex %>%
mutate(new_tenor = case_when(tenor == 'quarter'
~ str_replace(as.yearqtr(paste('1', delivery_window),
'%d %b %Y'), "(\d+) (\w+)", "\2 \1")
, TRUE ~ delivery_window))