将因子转换为日期时间,<fctr> 10/25/2018(M,D,Y)

时间:2019-06-28 17:40:23

标签: r datetime

我有一个名为RequisitionHistory2的数据框,其中有一个名为RequisitionDateTime的变量,而级别是看起来像4/30/2019 14:16的因子,我想将其分为日期时间格式的RequisitionDate和RequisitionTime。

我尝试了这段代码,但这仍然无法解决我的问题,因为需要将它们分成自己的列。该代码也无法正常工作,因为出现以下错误。

mutate(When = as.POSIXct(RequisitionHistory2, format="%m/%d/%. %H:%M %p"))

Error in as.POSIXct.default(RequisitionHistory2, format = "%m/%d/%. %H:%M %p") : do not know how to convert 'RequisitionHistory2' to class “POSIXct”

我想将变量RequisitionDateTime分为RequisitionDate和数据帧RequisitionHistory2中的另一个变量RequisitionTime。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

请勿将因子直接转换为日期时间。您需要先将其转换为字符,然后使用日期时间函数。

as.Date(as.character("10/25/2018"), format = "%m/%d/%Y")

将为您的date示例工作。

library(lubridate)
mutate(df,When = mdy_hm(RequisitionHistory2))

如果您的日期时间为4/30/2019 14:16格式

请注意,as.POSIXct()仅适用于ISO 8601格式的日期时间。我写了一篇关于此的博客文章,我认为这对您查看以下内容会有所帮助: https://jackylam.io/tutorial/uber-data/

答案 1 :(得分:0)

直接在CRAN上的anytime 许多格式(包括factorordered)转换为日期和日期时间对象。它还试探性地尝试了许多可行的格式,因此您不需要格式字符串。有关简介,请参见README at GitHub,还有vignette

您的示例有效:

R> library(anytime)
R> anytime(as.factor("4/30/2019 14:16"))
[1] "2019-04-30 14:16:00 CDT"
R> anytime(as.factor("4/3/2019 14:16:17"), useR=TRUE)
[1] "2019-04-03 14:16:17 CDT"
R> 

但是,底层的(Boost C ++)解析器不喜欢单位数字的天数或月份,因此您可能需要像第二个示例一样通过useR=TRUE来回退到R的解析器。