我有一个小标题,其中有一列格式为日期。出于问题的目的,我将生成类似的数据(真实数据要大得多!):
> 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)
发生了什么事,有没有办法使用 %>% 管道获得预期的答案?
您可以通过多种方式实现所需的输出。我们可以用来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)