如何解决用偏移量计算 rollsum 和 Delt
我有 df a
,它有两列,即;电脑和价格如下
dput(a)
structure(list(PC = c(0,-0.009,-0.008,0.003,0.008,-0.017,0.032,0.062,-0.02),Price = c(111.449554,110.495506,110.476242,109.560745,109.859482,110.68824,108.780159,112.239769,119.216805,116.826897)),class = "data.frame",row.names = c(NA,-10L))
我有 lookbackPeriod = 2
,这意味着我必须为每第 n 个 rollsum
计算 a$PC
列的 lookbackPeriod
和
这个我可以计算
b <- data.frame(Mscore = rollsum(a$PC,k=lookbackPeriod ))
我也有 holdPeriod = 2
,这意味着我必须计算每第 n 个 holdPeriod
的价格百分比,但第 n 个 holdPeriod
周期从第 n 个 lookbackPeriod
结束处开始
例如,如果这是 a
,那么对于 rollsum,它将考虑黄色的值,但要计算百分比变化,它将考虑橙色和绿色的值。
因此,对于给定的输入,B 中的最终输出看起来是这样的
输出将有 nrow(a) - lookbackPeriod + 1 - holdPeriod
次观察
这种给了我结果但它强迫LHS在最后一行列出并且Delt函数结果的前两条记录有NA
b <- data.frame(Mscore = rollsum(a$PC,k=lookbackPeriod ))
b <- b[1:(nrow(b)-holdPeriod+1),]
a <- a[lookbackPeriod:nrow(a),]
b$PChg <- as.data.frame( Delt(a$Price,k=holdPeriod))
解决方法
使用 rollapply
的宽度等于左对齐使用适当函数的结果的总和:
library(zoo)
k1 <- lookbackPeriod
k <- k1 + holdPeriod
roll <- function(...) rollapply(...,fill = NA,align = "left")
transform(a,MScore = roll(PC,k,function(x) sum(x[1:k1])),PChg = roll(Price,function(x) x[k]/x[k1]-1))
给予:
PC Price MScore PChg
1 0.000 111.4496 -0.009 -0.008459720
2 -0.009 110.4955 -0.009 -0.005582739
3 0.000 110.4762 -0.008 0.010291049
4 -0.008 109.5607 -0.005 -0.009824578
5 0.003 109.8595 0.011 0.014017108
6 0.008 110.6882 -0.009 0.095942551
7 -0.017 108.7802 0.015 0.040869008
8 0.032 112.2398 NA NA
9 0.062 119.2168 NA NA
10 -0.020 116.8269 NA NA
这种变体也适用:
f <- function(x) c(MScore = sum(x[1:k1,1]),PChg = x[k,2]/x[k1,2] - 1)
cbind(a,rollapply(a,f,align = "left",by.column = FALSE))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。