修改/优化R中的for循环以获得更快的结果

beq87vna  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(98)

我有一个大约3百万行的数据集,我想计算下一行和上一行之间的差值,但是当我们有这么多行时,R运行了很长时间。

nrow <- nrow(data_bitstamp)
for (i in 2:nrow) {
  data_bitstamp$diff[i] <- difftime(data_bitstamp$arb[i], data_bitstamp$arb[i-1])}

这已经运行了一个小时,仍然没有结果。也许有一个修改,可以用来更快地得到结果。

muk1a3rh

muk1a3rh1#

您可以使用lag函数创建一个列表,该列表可以用作difftime函数的参数,如下所示。我还创建了一个 Dataframe 并添加了一些定时代码。

# make a 10 million row data frame
data_bitstamp = data.frame('arb' = rep(Sys.time(), 10000000))
starttheclock = Sys.time() # timing start

lag_arb = lag(data_bitstamp$arb) 
data_bitstamp$diff = difftime(data_bitstamp$arb, lag_arb)

stoptheclock = Sys.time()  # timing end
elapsed = stoptheclock - starttheclock
elapsed
# Time difference of 0.8299184 secs

lagdifftime可以在一行中完成,但为了清楚起见,我将它们分开显示。

相关问题