如何使用 `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))
我在数据框中有一个日历日期列表,格式如下:
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))