【问题标题】:Change Date format - Convert to Date Class [duplicate]更改日期格式 - 转换为日期类 [重复]
【发布时间】:2022-01-08 03:32:58
【问题描述】:

我有一列作为字符读入的日期。我想生成一个具有我想要的格式的数据类(例如,美国风格,2020 年 8 月 28 日)。 但是,所有更改格式、生成字符类或生成具有标准格式的日期类的解决方案 (2020-08-28) 这是一个可重现的例子:

df1 <- data.frame(date=c("08/27/2020", "08/28/2020", "08/29/2020"), cases=c(5,6,7))
class(df1$date)


df1$date1<- format(as.Date(df1$date, format = "%m/%d/%Y"), "%m/%d/%Y")
class(df1$date1)

df1$date2<-as.Date(parse_date_time(df1$date,"%m/%d/%Y"))
class(df1$date2)

df1$date3<- as.Date(df1$date, format = "%m/%d/%Y")
class(df1$date3)

df1

如您所见,data1 具有我想要的格式,但它不是日期类。另外,date2 和 date3 是 Date 类,但它们会产生不想要的格式。

   date    cases  date1      date3      date2

1| 2020 年 8 月 27 日 | 5 | 08/27/2020 |2020-08-27 | 2020-08-27|

2| 2020 年 8 月 28 日 | 6 | 08/28/2020 |2020-08-28 | 2020-08-28|

3| 2020 年 8 月 29 日 | 7 | 08/29/2020 |2020-08-29 | 2020-08-29|

我哪里错了?

【问题讨论】:

  • 再次检查。在我的机器上运行 as.Date(df1$date, format = "%m/%d/%Y") 会返回一个 Date 类的对象。
  • 日期类在 R 中是固定格式YYYY-MM-DD。其他任何东西都是字符类。
  • 如您在上面的链接中看到的,可以更改打印格式,但请注意其中的cmets中的相关反对意见。
  • 谢谢@setfan。是的。它返回一个类日期的对象,但输出格式是不需要的。

标签: r dataframe date format as.date


【解决方案1】:

Date 类在 R 中始终显示为“2020-08-27”。这是 R 的标准 Date。要将其重新格式化为不同的格式,您可以使用strftime。它假定一个 Date 类并以您想要的格式输出一个 character 对象,例如

df1$date2
[1] "2020-08-27" "2020-08-28" "2020-08-29"

class(df1$date2)
[1] "Date"

strftime(df1$date2, format="%m/%d/%Y")
[1] "08/27/2020" "08/28/2020" "08/29/2020"

class(strftime(df1$date2, format="%m/%d/%Y"))
[1] "character"

【讨论】:

    【解决方案2】:

    在处理日期和时间时,lubridate 包真的很方便:https://lubridate.tidyverse.org/

    在这种情况下,我们可以使用mdy 函数(月、日、年)作为日期和日期1。

    library(lubridate)
    library(dplyr)
    df1 %>% 
      mutate(across(c(date, date1), mdy))
    
      date       cases date1      date3     
      <date>     <dbl> <date>     <date>    
    1 2020-08-27     5 2020-08-27 2020-08-27
    2 2020-08-28     6 2020-08-28 2020-08-28
    3 2020-08-29     7 2020-08-29 2020-08-29
    

    【讨论】:

    • 问题是 Date 类是固定格式的,正如@Ronak Shah 提到的那样。
    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多