2017-09-13 214 views
1

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包中是否存在某些工具來讀取像羅馬數字一樣的自定義日期?

回答

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.romanutils改造對象爲roman類,轉將此對象轉換爲數字字符串並從basemonth.abb中提取月份。

相關問題