问题描述
我正在处理一个数据集,在该数据集中,将posixct日期四舍五入为data.table的一列中最接近的小时,该行具有8800万行。
我用过一轮。日期(按基准)和round_date(按lubridate),它们都超出了内存,因此无法完成。最后,我将数据集分为四个相等的部分,将必要的列四舍五入,然后向后绑定。
是否有一种很好的方法来以更高的内存效率对日期进行舍入
预先感谢
解决方法
这应该很棒又快速
#sample data
library( data.table )
n = 1000000
set.seed(123)
DT <- data.table( id = 1:n,timestamp = sample(seq(as.POSIXct('2017/01/01'),as.POSIXct('2020/05/01'),by="5 mins"),replace = TRUE,n) )
#split timestamp to iDate and iTime
DT[,c("date","time") := IDateTime( timestamp ) ]
#round the iTime
DT[,time_rounded := round( time,units = "hour" )]
#convert iDate and rounded iTime back to posixct (add timezone if needed)
DT[,timestamp_rounded := as.POSIXct( time_rounded,date = date ) ]
可能的问题:第二天四舍五入到00:00 ...您应该对此进行测试并在需要时调整日期...