[英]Using tidyverse %>% pipe with Dates and format(); how to prevent gobbledygook characters?
我有一個帶有日期格式的列的小標題。 為了這個問題,我將生成類似的數據(實際數據要大得多!):
> 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
我只想隔離幾個月。 當我提取月份而不使用管道時,它可以按預期工作:
> format(dates$YrMon, "%m")
[1] "01" "02" "03" "04"
但是,當我使用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"
這是怎么回事,有沒有辦法使用%>%管道來獲得預期的答案?
您不希望自動插入點,因此請使用以下命令:
dates %>% { format(.$YrMon, "%m") }
## [1] "01" "02" "03" "04"
或使用magrittr %$%
管道:
library(magrittr)
dates %$% format(YrMon, "%m")
## [1] "01" "02" "03" "04"
這也將起作用:
dates %>% with(format(YrMon, "%m"))
## [1] "01" "02" "03" "04"
您可以通過兩種方式實現所需的輸出。 我們可以使用pull
提取目標列並按以下方式處理:
dates %>% pull(YrMon) %>% format(., "%m")
[1] "01" "02" "03" "04"
另外,我們可以簡單地使用mutate
,如下所示:
dates %>%
mutate(YrMon = format(YrMon, "%m"))
# A tibble: 4 x 1
YrMon
<chr>
1 01
2 02
3 03
4 04
一個人也可以使用lubridate
的month
來獲得month
(返回一個整數):
dates %>%
mutate(YrMon = month(YrMon))
# A tibble: 4 x 1
YrMon
<int>
1 1
2 2
3 3
4 4
使用map
(給我們一個列表,使用map_*
覆蓋):
dates %>%
map(.,format,"%m")
$YrMon
[1] "01" "02" "03" "04"
不使用管道,只需執行以下操作即可:
with(dates, format(YrMon, "%m"))
[1] "01" "02" "03" "04"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.