我有一个名为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。任何帮助将不胜感激!
答案 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包 将许多格式(包括factor
和ordered
)转换为日期和日期时间对象。它还试探性地尝试了许多可行的格式,因此您不需要格式字符串。有关简介,请参见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的解析器。