r语言 - align.time()在XTS软件包中花费大量时间



i i我有〜10 GB的文件大小(作为data.table格式(,该文件由80m行和15列组成,
现在,我试图将date_time列与以下代码

的最接近15分钟相提并论
df$Date_time<-as.POSIXct(df$Date_time,format="%Y-%m-%d %H:%M:%S")           
df$Date_time <- align.time(df$Date_time-lubridate::minutes(8), n=60*15)

上面的2个语句需要大量时间进行运行。是否需要进行任何修改减少执行时间?

预先感谢。

使用 @akrun的建议转换为posix后,您可能需要考虑使用data.table roll ING连接到最接近的15分钟:

#generate a sequence of 15mins intervals
lookup <- data.table(Oldintvl15mins=seq(from=df[,as.POSIXct(as.Date(min(Date_time)))],
    to=df[,as.POSIXct(as.Date(max(Date_time)) + 1)], by="15 min"), key="Oldintvl15mins")[,
        intvl15mins := Oldintvl15mins]
#print original sample data
df
#roll to nearest
lookup[df, roll="nearest"]

样本数据:

N <- 24*60*60
set.seed(22L)
df <- data.table(Date_time=sample(seq(as.POSIXct(Sys.Date()), by="1 min", length.out=N), 1000), key="Date_time")
setorderv(df, key(df))

由于您使用的是数据。这在我的工作站上只需要几秒钟:

N <- 24*60*60*365*10
n <- 80e6
set.seed(22L)
ds <- seq(as.POSIXct("2017-02-21"), by = "1 min", length.out = N)    
dt <- data.table(Date_time = sample(ds, n), key = "Date_time")    
setorderv(dt, key(dt))
system.time({dt[, dt_aligned := align.time(Date_time - 8*60, n = 60*15)]})
#    user  system elapsed
#   2.632   0.808   3.441

另一个问题可能是您的计算机根本没有足够的可用内存。发生这种情况时,操作系统将开始使用物理驱动器空间作为虚拟内存,它比RAM慢得多。

最新更新