具有条件的滚动功能

时间:2017-10-23 09:10:12

标签: r dplyr

目标是计算Cum.Buy变量,该变量是Volume.Cumsum高于当前值的所有行的Buy.Volume的总和。例如,对于行622,Cum.Buy将对当前行(6000)的Buy.Volume和Volume.Cumsum介于9973和(9973-10000 = -27)之间的所有行的Buy.Volume求和,其中包括Row 566. Do,Cum.Buy等于6000 + 2718。其次,使用相同的参数我希望得到初始价格。

df <- read.table(text="
Row Price Volume Volume.Cumsum Buy.Volume
550 6.249    151           151          0
554 6.249   1104          1255          0
566 6.250   2718          3973       2718
622 6.250   6000          9973       6000
652 6.249    745         10718          0
653 6.249   1292         12010          0
661 6.250   5918         17928       5918
663 6.250  13130         31058      13130
664 6.250   4894         35952       4894
673 6.250   4894         40846       4894", header=T)

我试过这个函数,但是我遇到了二元运算符错误:

BV <- function(x) {
  if (is.null(dim(x))) x <- t(x)
  tt <- x[, "Volume.Cumsum"]
  sum(x[tt >= tail(tt, 1) - 10000, "Buy.Volume"])
}

df = transform(df,Cum.Buy=rollapplyr(df,100,BV,by.column=FALSE,partial=TRUE)

结果输出应如下所示:

df <- read.table(text="
Row Price Volume Volume.Cumsum Buy.Volume   Cum.Buy   Price.Lag
550 6.249    151           151          0         0       6.249
554 6.249   1104          1255          0         0       6.249
566 6.250   2718          3973       2718      2718       6.249
622 6.250   6000          9973       6000      8718       6.249
652 6.249    745         10718          0      8718       6.249
653 6.249   1292         12010          0      8718       6.250
661 6.250   5918         17928       5918     11918       6.250
663 6.251  13130         31058      13130     13130       6.251
664 6.250   4894         35952       4894     18024       6.251
673 6.250   4894         40846       4894     22918       6.251", header=T)

0 个答案:

没有答案