【问题标题】:How to convert character string with as.Date but display as dd/mm/yyyy如何使用 as.Date 转换字符串但显示为 dd/mm/yyyy
【发布时间】:2021-02-06 17:43:10
【问题描述】:

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

这个

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$date 成为dd/mm/yyyy

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

【问题讨论】:

  • 试试这个:p %&gt;% mutate(date = as.Date(mr_daterd, format = '%d/%m/%Y'), mr_daterd = mr_daterd,date2=format(date,'%d/%m/%Y'))
  • 另见date2,其中包含您想要的样式。 R中的日期存储为year-month-day,如果要更改,则必须使用format()
  • 谢谢@Duck。看来我必须在您的解决方案中执行两个步骤:首先创建date=as.Date..,然后从date 创建date2=format.. - 没有一个解决方案可以满足我的要求吗?我试过date=format(as.Date(mr_daterd, format = '%d/%m/%Y'),'%d/%m/%Y'),但没有成功。
  • 也许试试这个p %&gt;% mutate(date=format(as.Date(mr_daterd, format = '%d/%m/%Y'),'%d-%m-%Y'))
  • cmirian,您的日期已经采用“dd/mm/yyyy”格式。如果您希望它们作为 R 中的实际日期对象,它们将以yyyy-mm-dd 格式存储和显示。当您使用format 时,您会将它们转换回字符。如果您需要以某种方式为某个输出显示日期,您可以在处理日期后将其作为“最后一件事”。

标签: r dataframe date dplyr as.date


【解决方案1】:

实现您想要的一种方法是创建您自己的 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" 的所有其他通用函数,因此其行为仍与 Date 对象相同:

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

plot(p$date, rnorm(15))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2018-05-19
    • 2019-01-26
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多