如何在R中有效地进行基于前一行的计算?

时间:2014-08-22 04:13:29

标签: r

我的数据框看起来像这样:

       time    open   close    high     low quantity    vwap                date
1253687 1388552400 741.601 744.000 744.900 741.601    1.957 744.160 2014-01-01 00:00:00
1253688 1388552460 744.000 744.000 744.000 744.000    0.000 744.000 2014-01-01 00:01:00
1253689 1388552520 744.900 744.900 744.900 744.890    3.197 744.897 2014-01-01 00:02:00
1253690 1388552580 744.889 741.803 744.889 741.803    5.511 742.593 2014-01-01 00:03:00
1253691 1388552640 744.881 744.881 744.881 744.881    0.160 744.881 2014-01-01 00:04:00
1253692 1388552700 744.881 741.803 744.881 741.803    1.010 741.833 2014-01-01 00:05:00

我想创建一个新列,它存储过去3分钟内的最低点,以及一个存储过去3分钟内最高点的新列。

数据帧有100k行,所以通过查看各行并循环遍历所有行来进行操作很慢,这是一种快速的方法吗? (类似于diff()函数,它可以快速计算行的差异)

1 个答案:

答案 0 :(得分:0)

您的数据经常间隔,因此您可以使用滚动窗口功能。例如,请查看rollmaxr()包中的zoo

library(zoo)
df$High3Min <- rollmaxr(df$high, 3, fill=NA)
df$Low3Min <- (-1)*rollmaxr((-1)*df$low, 3, fill=NA)

如果您将来需要比min和max更通用的东西,那么各种包装中还有其他滚动窗口功能。

如果您希望它向后看而不是在同期行,您可以使用您选择的滞后方法将每个向量滞后一次,然后再将它们放入数据帧中。