1

我想计算我的数据的第 6 列的运行平均值,窗口为 50,并将平均值存储在从第 50 行开始的第 7 列(卷)中(前 49 行将是空白或 NA)到目前为止,我已经参考了以下代码它将值存储在第 7 列(卷)的第一行中。我如何将其更改为从第 50 行开始?

for(i in 1: length(StockData[ , 6]-49)) 
{  
  StockData$Volume [i] <- mean(StockData[i:min(i+49, nrow(StockData)),6]) 
}
4

1 回答 1

1

一旦我们有索引从第 1 行循环到最后一行()之前的第 49 行,通过将循环中的每个索引与 49 ie等相加i1,将 分配给“卷”列。meanfor1 + 49 = 50 2 + 49 = 51

i1 <- 1:(nrow(StockData) - 49)
for(i in i1) StockData$Volume[i + 49] <- mean(StockData[[6]][i:(i+ 49)])
StockData$Volume
#  [1]          NA          NA          NA          NA          NA          NA          NA
#  [8]          NA          NA          NA          NA          NA          NA          NA
# [15]          NA          NA          NA          NA          NA          NA          NA
# [22]          NA          NA          NA          NA          NA          NA          NA
# [29]          NA          NA          NA          NA          NA          NA          NA
# [36]          NA          NA          NA          NA          NA          NA          NA
# [43]          NA          NA          NA          NA          NA          NA          NA
# [50] -0.19629964 -0.24644362 -0.23783891 -0.26612198 -0.24675588 -0.22167644 -0.19686068
# [57] -0.17468898 -0.22060983 -0.24581253 -0.28938032 -0.25877811 -0.23004419 -0.21873832
# [64] -0.25380578 -0.29241801 -0.27468023 -0.26958748 -0.23289877 -0.20673662 -0.19514563
# [71] -0.20304788 -0.25285171 -0.27237608 -0.28292086 -0.27282226 -0.28069595 -0.26402249
# [78] -0.24157390 -0.20787905 -0.18768505 -0.20224311 -0.20345300 -0.19355069 -0.19980993
# [85] -0.21982236 -0.21592697 -0.19056489 -0.18937285 -0.25814298 -0.24351155 -0.22539465
# [92] -0.18168959 -0.20872355 -0.19644329 -0.17326079 -0.13079761 -0.08915261 -0.10408647
# [99] -0.07350988 -0.01842930

如果我们使用rollmeanfrom将是相同的值zoo

library(zoo)
rollmean(StockData[[6]], k = 50, fill = NA, align = "right")
# [1]          NA          NA          NA          NA          NA          NA          NA
#  [8]          NA          NA          NA          NA          NA          NA          NA
# [15]          NA          NA          NA          NA          NA          NA          NA
# [22]          NA          NA          NA          NA          NA          NA          NA
# [29]          NA          NA          NA          NA          NA          NA          NA
# [36]          NA          NA          NA          NA          NA          NA          NA
# [43]          NA          NA          NA          NA          NA          NA          NA
# [50] -0.19629964 -0.24644362 -0.23783891 -0.26612198 -0.24675588 -0.22167644 -0.19686068
# [57] -0.17468898 -0.22060983 -0.24581253 -0.28938032 -0.25877811 -0.23004419 -0.21873832
# [64] -0.25380578 -0.29241801 -0.27468023 -0.26958748 -0.23289877 -0.20673662 -0.19514563
# [71] -0.20304788 -0.25285171 -0.27237608 -0.28292086 -0.27282226 -0.28069595 -0.26402249
# [78] -0.24157390 -0.20787905 -0.18768505 -0.20224311 -0.20345300 -0.19355069 -0.19980993
# [85] -0.21982236 -0.21592697 -0.19056489 -0.18937285 -0.25814298 -0.24351155 -0.22539465
# [92] -0.18168959 -0.20872355 -0.19644329 -0.17326079 -0.13079761 -0.08915261 -0.10408647
# [99] -0.07350988 -0.01842930

数据

set.seed(24)
StockData <- as.data.frame(matrix(rnorm(100 * 7), ncol =7, nrow = 100, 
    dimnames = list(NULL, c(paste0("V", 1:6), "Volume"))))
StockData$Volume <- NA
于 2020-02-29T23:42:06.080 回答