我在 R 中使用rollapply
(来自zoo
包)来获取数据框中一系列行的滚动平均值。
对于焦点行所在的每一行,x
我试图获得多种方法。我可以用循环来做到这一点,但它很慢,我尽量避免循环。
目的是获得 4 种不同规格的滚动装置:
- 行
x
,x-1
和x+1
: "Rat3"的平均值 x
逐行的平均值x+7
:“RatE”x+8
行的平均值x+15
:“RatL”x
行的平均值x+15
:“RatJ”
使用循环我可以得到所有这些,但它很慢:
tempDF = data.frame(sample(c("A","B"), replace = T, size = 100),rnorm(100,10,2))
colnames(tempDF) = c("Cohort","Rat")
for(i in 1:length(tempDF$Cohort)){
tempDF$Rat3[i] = (mean(tempDF$Rat[(i-1):(i+1 )], na.rm = FALSE))
tempDF$RatE[i] = (mean(tempDF$Rat[(i+0):(i+7 )], na.rm = FALSE))
tempDF$RatL[i] = (mean(tempDF$Rat[(i+8):(i+15)], na.rm = FALSE))
tempDF$RatJ[i] = (mean(tempDF$Rat[(i+0):(i+15)], na.rm = FALSE))
}
我可以使用以下功能获得 Rat3 rollapply
:
tempDF$Rat3 = c(0,rollapply(tempDF$Rat, 3, FUN = mean, by = 1),0)
但我被困在如何修改它以使其不以价值 $x$ 为中心,而是使用 $x$(或 $x+8$)作为滚动平均值的起点。如何设置rollapply
函数以操纵它“移动”滚动平均窗口的方式?
这是一个不优雅的解决方案:
tempDF$RatE = c(0,0,0,0,rollapply(tempDF$Rat, 8, FUN = mean, by = 1),0,0,0)
tempDF$RatE = c(tempDF$RatE[5:(length(tempDF$RatE)-3)],rep("0",times=7))