如何使数据框日期列中的日期格式相同?

How to make the format of dates same in the date column of a data frame?

我有 station wise Discharge 数据框 df。日期(我从现有 .csv 文件中导入)格式不规则。下面是一个示例数据框:

> df
  Station       Date Discharge
1       A 1981-01-01       0.1
2       A 1981-02-01       0.0
3       B 1981-03-01       0.0
4       B 1981-04-01       0.0
5       B 1/13/1981        0.4
6       C 1/14/1981        0.2
7       D 1/15/1981        0.6
8       D 1981-16-01       0.1
9       D 1981-17-01       0.5

因为这个数据的进一步处理是困难的。我尝试了以下方法:

> df$Date <- as.Date(df$Date, "%m/%d/%Y")
> df
  Station       Date Discharge
1       A 1981-01-01       0.1
2       A 1981-02-01       0.0
3       B 1981-03-01       0.0
4       B 1981-04-01       0.0
5       B NA               0.4
6       C NA               0.2
7       D NA               0.6
8       D 1981-16-01       0.1
9       D 1981-17-01       0.5

正在引入 NA。如何使所有日期的格式相同。如果日期格式为 d-m-y 就好了。任何指导表示赞赏。谢谢。

您可以先使用lubridate::parse_date_time获取标准格式的数据。函数中可以传递多种格式。

lubridate::parse_date_time(df$Date, c('Ydm', 'mdY'))

#[1] "1981-01-01 UTC" "1981-01-02 UTC" "1981-01-03 UTC" "1981-01-04 UTC" "1981-01-13 UTC"
#[6] "1981-01-14 UTC" "1981-01-15 UTC" "1981-01-16 UTC" "1981-01-17 UTC"

然后使用 format 获取您想要的任何格式的数据。

format(lubridate::parse_date_time(df$Date, c('Ydm', 'mdY')), '%d-%m-%Y')

#[1] "01-01-1981" "02-01-1981" "03-01-1981" "04-01-1981" "13-01-1981" "14-01-1981"
#[7] "15-01-1981" "16-01-1981" "17-01-1981"

请注意 format 的输出是 class 字符而不是日期。日期在 R 中只能有一种格式,即 Ymd.

as.Date(lubridate::parse_date_time(df$Date, c('Ydm', 'mdY')))

#[1] "1981-01-01" "1981-01-02" "1981-01-03" "1981-01-04" "1981-01-13" "1981-01-14"
#[7] "1981-01-15" "1981-01-16" "1981-01-17"