更改日期格式 - 转换为日期 Class

Change Date format - Convert to Date Class

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

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 具有我想要的格式,但它不是日期 class。此外,date2 和 date3 是 Date class 而它们会产生不需要的格式。

   date    cases  date1      date3      date2

1| 08/27/2020 | 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|

我哪里错了?

A​​ Date class 在 R 中总是显示为“2020-08-27”。这是 R 的标准 Date。要将其重新格式化为不同的格式,您可以使用 strftime。它假定日期 class 并输出具有所需格式的 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"

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

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

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