使用 lubridate 和管道将日期转换为年月日

convert date to year-month-day using lubridate and pipes

我想使用 lubridate 和管道将“day/month/year”中的日期转换为“year/month/day”,但我遇到了问题。此外,'public_release' 的第一行切换了日期和月份。 bwg_releasepublic_release 的前三行应反映 1 月 6 日的日期。 例如

    datasets %>%
+   select(bwg_release, public_release)
  bwg_release public_release
1  06/01/2016     01/06/2018
2  06/01/2016     06/01/2018
3  06/01/2016     06/01/2018
4  17/04/2016     17/04/2016

当前输出:

datasets %>% 
+   mutate(bwg_release_new_date = format(dmy(bwg_release),"%Y/%m/%d")) %>%
+   mutate(public_release_new_date = format(dmy(public_release),"%Y/%m/%d")) %>%
+   select(bwg_release_new_date,public_release_new_date)
  bwg_release_new_date public_release_new_date
1           2016/01/06              2018/06/01
2           2016/01/06              2018/01/06
3           2016/01/06              2018/01/06
4           2016/04/17              2016/04/17     

期望的输出:

bwg_release_new_date public_release_new_date
1           2016/01/06              2018/01/06
2           2016/01/06              2018/01/06
3           2016/01/06              2018/01/06
4           2016/04/17              2016/04/17

我相信建议是使用基础 format 函数。只需使用 dmy() 读取日期,然后定义您的格式。

library(dplyr)
library(lubridate)
datasets %>% 
  mutate(output = format(dmy(bwg_release), format = "%Y/%m/%d"))
  bwg_release     output
1  06/01/2016 2016/01/06
2  06/01/2016 2016/01/06
3  06/01/2016 2016/01/06
4  17/04/2016 2016/04/17

为了完整起见使用正则表达式,尽管 @IanCampbell (+1) 解决方案是可行的方法。

datasets %>%
 mutate(bwg_release=ymd(gsub("(\d+)/(\d+)/(\d+)","\3/\2/\1",  bwg_release)))
# A tibble: 4 x 1
  bwg_release
  <date>     
1 2016-01-06 
2 2016-01-06 
3 2016-01-06 
4 2016-04-17