数据行之间的时差。有没有比for循环更快的方法呢?

时间:2016-12-23 10:00:27

标签: r for-loop

我有很多数据,每行都有一个时间戳。我想制作一个行与行之间的时差。这是一个虚拟时间序列:

start.day <- as.POSIXct("2010-11-25 04:13:00 WET")
end.day <- as.POSIXct("2016-11-25 16:25:35 WET")
days.seq <- seq.POSIXt(start.day,end.day,'mins')
days.seq <- sample(days.seq,100000)
days.seq <- days.seq[order(days.seq)]

我从一个for循环开始,但循环需要很长时间才能进行计算:

start.time <- Sys.time()

time.diff <- NULL
for (i in 2:length(days.seq)) {
  time.diff[i]<- difftime(days.seq[i],days.seq[i-1],units = 'mins')
}
time.diff[1] <- 0
time.diff

end.time <- Sys.time()

difftime(end.time,start.time,'secs')

如何让R更快地做到这一点?

1 个答案:

答案 0 :(得分:0)

在对stackoverflow进行快速研究后,我发现将数据转换为列表并使用do.call(如对related question的回答中建议的那样)要快得多

start.time.A <- Sys.time()
L <- list(days.seq)
LS <- do.call(diff,L)
attributes(LS) <- NULL
LS <- rbind(0,as.data.frame(LS))
str(LS)
start.time.B <- Sys.time()
difftime(start.time.B,start.time.A,'secs')