将 tidyverse %>% 管道与日期和 format() 一起使用;如何防止官样文章字符?

mst*_*een 3 r pipe tidyverse

我有一个小标题,其中有一列格式为日期。出于问题的目的,我将生成类似的数据(真实数据要大得多!):

> dates = tribble(~YrMon, "2011-01-01", "2011-02-01", "2011-03-01", "2011-04-01") 
              %>% mutate(YrMon = as.Date(YrMon))
> dates
# A tibble: 4 x 1
  YrMon     
  <date>    
1 2011-01-01
2 2011-02-01
3 2011-03-01
4 2011-04-01
Run Code Online (Sandbox Code Playgroud)

我只想隔离几个月。当我在不使用管道的情况下提取月份时,它按预期工作:

> format(dates$YrMon, "%m")
[1] "01" "02" "03" "04"

Run Code Online (Sandbox Code Playgroud)

然而,当我使用 tidyverse 管道做我认为应该是相同的事情时,我得到了 gobbledygook (我认为这是返回的 tibble 的某种格式):

> dates %>% format(.$YrMon, "%m")
[1] "\033[38;5;246m# A tibble: 4 x 1\033[39m"          
[2] "  YrMon     "                                     
[3] "  \033[3m\033[38;5;246m<date>\033[39m\033[23m    "
[4] "\033[38;5;250m1\033[39m 2011-01-01"               
[5] "\033[38;5;250m2\033[39m 2011-02-01"               
[6] "\033[38;5;250m3\033[39m 2011-03-01"               
[7] "\033[38;5;250m4\033[39m 2011-04-01"
Run Code Online (Sandbox Code Playgroud)

发生了什么事,有没有办法使用 %>% 管道获得预期的答案?

Nel*_*Gon 5

您可以通过多种方式实现所需的输出。我们可以用来pull提取目标列并按如下方式处理:

dates %>% pull(YrMon) %>% format(., "%m")
[1] "01" "02" "03" "04"
Run Code Online (Sandbox Code Playgroud)

或者,我们可以简单地使用mutate如下:

dates %>% 
 mutate(YrMon = format(YrMon, "%m"))
# A tibble: 4 x 1
  YrMon
  <chr>
1 01   
2 02   
3 03   
4 04 
Run Code Online (Sandbox Code Playgroud)

lubridate还可以使用's获取月份month(返回一个整数):

dates %>% 
   mutate(YrMon = month(YrMon))
# A tibble: 4 x 1
  YrMon
  <int>
1     1
2     2
3     3
4     4
Run Code Online (Sandbox Code Playgroud)

With map(给我们一个列表,使用map_*来覆盖):

dates %>% 
   map(.,format,"%m")
$YrMon
[1] "01" "02" "03" "04"
Run Code Online (Sandbox Code Playgroud)

不使用管道,可以简单地执行以下操作:

with(dates, format(YrMon, "%m"))
[1] "01" "02" "03" "04"
Run Code Online (Sandbox Code Playgroud)