【发布时间】:2017-02-15 15:21:39
【问题描述】:
我有一个包含 500 万行以上的数据集,我想从两列创建时间戳,一列带有日期,另一列带有时间值。
当我使用 fread() 函数将 csv 读入 R 时,所有列都是字符格式,因此我使用 data.table 将它们转换为相关格式,这对于这类事情来说非常快:
nf[, (dcols):= lapply(.SD,ymd),.SDcols=dcols] #using the ymd() function from lubridate to change date columns
我的下一步是创建一个时间戳,我按以下方式进行:
nf[,start_timestamp := as.POSIXct(paste(start_date,start_time))]
如果我围绕这个函数调用运行 Sys.Time(),我会得到 3.843 分钟的时间差。这需要等待一段时间,所以我想知道是否有人可以建议一个基于 data.table 的解决方案,让我能够更快地将这两列组合成一个时间戳?
【问题讨论】:
-
你应该做一个可重现的例子:一些可用的数据作为
n和nc(行和列)的函数,以及适当的库调用。 Data.table 包括一些日期时间功能,但它涉及将日期和时间保存在单独的列中。见?IDateTime。 -
见this。我的猜测是
as.POSIXct是你的瓶颈。另外,我不确定你用ymd做什么。 -
@DavidArenburg 我认为
as.POSIXct一定是瓶颈。我使用ymd将日期格式从字符更改为日期 - 我发现它比as.Date工作得更快。 @Frank - 我将创建一些示例数据并编辑原始帖子。 -
你看我之前评论中的链接了吗?
-
请不要那样做
tt2 <- tt2。:=更新tt2到位。另外,不用tt2 <- as.data.table(tt),只需执行setDT(tt)并在tt上操作。无需在环境中拥有相同数据集的相同副本。
标签: r data.table