【发布时间】:2018-03-29 08:28:40
【问题描述】:
我有一个日期为字符的列,格式为10/17/2017 12:00:00 AM。我想解析字符串并仅将日期部分保留为类Date,即2017-10-17。我正在使用 -
df$ReportDate = as.Date(df$ReportDate, format = "%m/%d/%Y %I:%M:%S %p")
df$ReportDate = as.Date(format(df$ReportDate, "%Y-%m-%d"))
这可行,但数据帧有超过 500 万行,所以这需要将近两分钟。
user system elapsed
104.73 0.55 105.46
有没有更快更有效的方法来做到这一点?
【问题讨论】:
-
一个excel文件有超过5M行?我猜它是一个csv文件。尝试使用来自
datatable包的fread -
对不起,我认为我的问题不清楚。需要时间的不是读取过程,而是日期转换过程。将编辑。
-
这是用于计算还是用于报告。您的两行代码返回等效向量,至少对我而言。
df <- rep("8/31/2017 12:30:00 pm", 5e6); df <- as.Date(df, format = "%m/%d/%Y %I:%M:%S %p"); df1 <- as.Date(format(df, "%Y-%m-%d")); all(df == df1) -
您可以使用
substr仅提取日期部分 - 留下时间 - 然后在不解析时间的情况下使用as.Date(df$ReportDate, format = "%m/%d/%Y)可能会更快 - 我不确定。我也不确定你为什么要使用as.Date两次。一次还不够吗? -
as.Date("10/17/2017 12:00:00 AM", format = "%m/%d/%Y")就足够了。 "每个输入字符串都按照指定格式进行处理:忽略任何尾随字符。"