2016-12-23 7 views
0

私はすべての行にタイムスタンプがある多くのデータを持っています。私は、行間の時間差を持つベクトルを作りたい。ここではダミーの時系列である:データの行間の時間差。 forループよりも速い方法がありますか?

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が速く、これを行うことができますどのように?

答えて

0

はstackoverflowの上の迅速な研究の後、私は(related questionへの答えで提案されているように)リストにデータを変換し、do.callを使用して

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') 
+0

理由だけではなく、 '差分(days.seqはるかに高速であることがわかりました) '? – Khashaa

関連する問題