用Tidyverse解析罗马数字中的自定义日期和月份?

问题描述:

Tidyverse拥有神话般的Readr,它有各种各样的解析命令,如parse_dateparse_*,parse_factorguess_parser。我有一个自定义month-year格式,如下面的罗马数字的条款,使得用Tidyverse解析罗马数字中的自定义日期和月份?

> emptyOffices$Month 
[1] " II/90" " I/91" " II/91" " I/92" " II/92" " I/93" " II/93" 

> guess_parser(emptyOffices$Month) 
[1] "character" 

其中I代表一月,II代表二月等等没有。例如,II/90代表February 1990guess_parser猜测月份错误的含义。也许,有一种工具可以用来定义几个月来帮助解析器理解这一点?

在某些Tidyverse包中是否存在某些工具来读取像罗马数字一样的自定义日期?

必须有更好的漂亮的解决方案,但这个工作:

library(dplyr) 
foo <- c("II/90", "I/91", "II/91", "I/92", "II/92", "I/93", "II/93")  
foo %>% 
    tibble() %>% 
    mutate(year  = gsub(".*/", "", .), 
      monthRom = as.roman(gsub("/.*", "", .))) %>% 
    mutate(monthNum = as.numeric(monthRom)) %>% 
    mutate(monthChr = month.abb[monthNum]) 
# A tibble: 7 x 5 
     . year monthRom monthNum monthChr 
    <chr> <chr> <chr> <dbl> <chr> 
1 II/90 90  II  2  Feb 
2 I/91 91  I  1  Jan 
3 II/91 91  II  2  Feb 
4 I/92 92  I  1  Jan 
5 II/92 92  II  2  Feb 
6 I/93 93  I  1  Jan 
7 II/93 93  II  2  Feb 

或者你可以简单地这样做:

foo %>% 
    gsub("/.*", "", .) %>% 
    as.roman() %>% 
    as.numeric() %>% 
    month.abb[.] 

使用as.romanutils改造对象为roman类,转将此对象转换为数字字符串并从basemonth.abb中提取月份。