目标是计算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)