如何使用 'as 将“数字字符串”转换为日期对象。日期()'?

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

提问人:ap21 提问时间:5/12/2022 最后编辑:jay.sfap21 更新时间:5/12/2022 访问量:621

问:

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

20000110 
20000117 
20000124

该标准为2000-01-10、2000-01-17、2000-01-24等。

但是,使用

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

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

df %>% mutate(date= as.Date(df$data, format = "%Y%m%d", origin="20000110") )
R DataFrame 日期 数据操作 强制

评论


答:

0赞 ap21 5/12/2022 #1

我找到了答案。诀窍是使用库的功能:lubridateymd()

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

这非常有效!

评论

1赞 Dirk Eddelbuettel 5/12/2022
另外:a) 在需要时进行转换,b) 不需要格式提示(对于像这样的“理智”输入格式)。为了完整起见,这也有效:.anytime::anydate(c(20000110, 20000117, 20000124))as.Date(as.character(c(20000110, 20000117, 20000124)), "%Y%m%d")
1赞 jay.sf 5/12/2022 #2

你的日期是类的,所以被调度,它有第二个参数。所以你所要做的就是强制调度,它有所需的参数。"numeric"as.Date.numericorigin=as.characteras.Date.characterformat=

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

通常,1970 年 1 月 1 日,即所谓的 Unix 纪元,数字是从那时起的天数(以秒为单位)。origin="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))