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

时间:2017-09-13 12:03:50

标签: r date parsing tidyverse readr

Tidyverse拥有精彩的Readr,它有各种各样的解析命令,例如parse_dateparse_*parse_factorguess_parser。我有一个自定义month-year格式,如下所示,罗马数字

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

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

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

在某些Tidyverse软件包中是否存在某些工具来读取自定义日期,例如罗马数字?

1 个答案:

答案 0 :(得分:1)

必须有更好的整洁解决方案,但这个有效:

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.roman中的utils将对象转换为类roman,将此对象转换为数字字符串,并从base month.abb中提取月份。