4

一位客户向我发送了一个 Excel 文件,其日期格式为 2012 年 3 月 15 日,日期为 3 月 15 日。我将其保存为 .csv 文件,然后使用

camm$Date <- as.Date(camm$Date, "%m/%d/%y")

但这给了我从 2020 年开始的价值!

我试图重新格式化原始 csv 文件中的日期,以便它们例如 2013 年 3 月 14 日,但无法这样做。

任何帮助表示赞赏

4

4 回答 4

10

改为使用资本Yas.Date这应该可以解决问题:

> as.Date("3/15/2012", "%m/%d/%Y")
[1] "2012-03-15"

从帮助文件的示例中,您可以意识到当年份已满时,您应该使用%Y其他方式%y,例如:

> dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92")
> as.Date(dates, "%m/%d/%y")
[1] "1992-02-27" "1992-02-27" "1992-01-14" "1992-02-28" "1992-02-01"

您可以看到,在您的示例中,年份格式是 2012,那么您应该使用%Y,而在另一个示例中(取自as.Date帮助文件)年份格式是 92,那么使用%y是正确的方法。有关详细信息,请参阅as.Date

于 2013-02-25T17:39:42.210 回答
2

lubridate如果你不想处理象形文字,你也可以试试这个包:)

> library(lubridate)
> parse_date_time('3/15/2012', 'mdy')
 1 parsed with %m/%d/%Y
[1] "2012-03-15 UTC"

PS:当然我不鼓励任何人使用任何额外的依赖项,这个答案只是作为替代(并且快速记住)解决方案发布在这里

于 2013-02-25T17:56:19.470 回答
1

我们可以mdy使用lubridate

lubridate::mdy('3/15/2012')
#[1] "2012-03-15"

parse_date从中readr使用相同的格式as.Date

readr::parse_date('3/15/2012', '%m/%d/%Y')
#[1] "2012-03-15"
于 2019-12-26T10:49:56.543 回答
1

为了完成这幅图,您还可以尝试最近推出的 (2016-09) 包anytime,该包利用了BoostC++ 库:

anytime::anytime("3/15/2012")
#[1] "2012-03-15 CET"
于 2017-01-05T18:14:55.267 回答