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  

也就是说,如果tenorquarter,我只想显示delivery window对应的季度,而不是月份。每月和每年的期限可以保持不变。

有人可以给我一个关于如何实现这个的提示吗?提前谢谢你。

编辑

对于从一月到三月的月份,new_tenor 应该是 Q1 YY,对于从 Apr YYJun YY 的月份,Q2 YYQ3 YYJul YYSep YY 的月份,以及 Q4 YYOct YYDec 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))