簡體   English   中英

使用帶有日期和format()的tidyverse%>%管道; 如何防止水墨字符?

[英]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 

一個人也可以使用lubridatemonth來獲得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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM