如何使用 `as.Date()` 将 "numeric string" 转换为日期对象?

How to convert "numeric string" to a date object using `as.Date()`?

我在数据框中有一个日历日期列表,格式如下:

20000110 
20000117 
20000124

2000-01-10、2000-01-17、2000-01-24 等的哪个标准

但是,使用

df %>% mutate(date= as.Date(df$data, format = "%Y%m%d") )

不起作用。它弹出一个错误,要求我提供 origin,这是 as.Date() 的可选输入。如果我随后提供列表中的第一个日期作为来源,它会给我完全错误的日期:

df %>% mutate(date= as.Date(df$data, format = "%Y%m%d", origin="20000110") )

我找到了答案。诀窍是使用 lubridate 库的 ymd() 函数:

df %>% mutate(date= lubridate::ymd(df$data) )

这非常有效!

您的日期是 class "numeric",因此 as.Date.numeric 被调度,其中 origin= 作为第二个参数。所以你所要做的就是强制 as.character 调度 as.Date.character,它具有所需的 format= 参数。

transform(df, date=as.Date(as.character(date), '%Y%m%d'))
#         date
# 1 2000-01-10
# 2 2000-01-17
# 3 2000-01-24

通常 origin= 是 1970 年 1 月 1 日,so-called Unix 纪元,数字 "date" 是从那时起的天数(采用 "POSIXt" 格式秒)。

as.Date(as.numeric(Sys.Date()))
# Error in as.Date.numeric(as.numeric(Sys.Date())) : 
#   'origin' must be supplied

as.Date(as.numeric(Sys.Date()), origin='1970-01-01')
# [1] "2022-05-12"

显然这对你的数字没有意义。


数据:

df <- structure(list(date = c(20000110, 20000117, 20000124)), class = "data.frame", row.names = c(NA, 
-3L))