微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用as.Date转换字符串但显示为dd / mm / yyyy

如何解决如何使用as.Date转换字符串但显示为dd / mm / yyyy

抱歉,我似乎无法找到这个看似基本的问题的解决方案。

p %>% mutate(date = as.Date(mr_daterd,format = '%d/%m/%Y'),mr_daterd = mr_daterd)

给予

     mr_daterd       date
1  28/03/2013  2013-03-28
2   10/01/2009 2009-01-10
3   16/09/2005 2005-09-16
4  28/03/2013  2013-03-28
5  28/03/2013  2013-03-28
6  28/03/2013  2013-03-28

我需要p$datedd/mm/yyyy

p <- structure(list(mr_daterd = c("18/03/2011","10/01/2009","11/03/2004","18/03/2011","16/09/2005","28/03/2013 ","10/01/2009")),row.names = c(NA,-15L),class = "data.frame")

解决方法

实现所需目标的一种方法是创建自己的S3类。这并不像听起来那么困难,只需要两行代码:

as.myDate <- function(x,...) `class<-`(as.Date(x,...),c("myDate","Date"))
format.myDate <- function(x,...) format(`class<-`(x,"Date"),"%d/%m/%Y")

然后,您可以这样做:

p$date <- as.myDate(p$mr_daterd,format = "%d/%m/%Y")

p
#>      mr_daterd       date
#> 1   18/03/2011 18/03/2011
#> 2   10/01/2009 10/01/2009
#> 3   10/01/2009 10/01/2009
#> 4   11/03/2004 11/03/2004
#> 5   10/01/2009 10/01/2009
#> 6   18/03/2011 18/03/2011
#> 7   16/09/2005 16/09/2005
#> 8   10/01/2009 10/01/2009
#> 9   18/03/2011 18/03/2011
#> 10  10/01/2009 10/01/2009
#> 11  18/03/2011 18/03/2011
#> 12  18/03/2011 18/03/2011
#> 13 28/03/2013  28/03/2013
#> 14 28/03/2013  28/03/2013
#> 15  10/01/2009 10/01/2009

此新类继承了“日期”中的所有其他通用函数,因此其行为仍与Date对象相同:

difftime(p$date[2],p$date[1])
#> Time difference of -797 days

plot(p$date,rnorm(15))

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。