0

私は、多くの気象変数と環境変数の毎日の測定値を含むデータフレームを持っています。14日間のラグを作成し、3つの異なる連続ラグ期間(ラグ0と1、ラグ2から6、8から14)の移動平均を計算する必要があります。以下に示すより。

library(gamair) 
library(mgcv) 
data(chicago) 

attach(chicago)
m <- length(tmpd)
t <- 14
LAG_tmpd <- matrix(0,m,t)  

for (j in 1:t)         
{
  for (g in 1:j)      
  {
    LAG_tmpd[g,j]<-NA

  }
  for(i in (j+1):m)   
  {
    LAG_tmpd[i,j]<-c(tmpd[i-j])

  }
}
tmpd_lag01 <- (LAG_tmpd[,1]+LAG_tmpd[,2])/2
tmpd_lag26 <- (LAG_tmpd[,3]+LAG_tmpd[,4]+LAG_tmpd[,5]+LAG_tmpd[,6]+LAG_tmpd[,7])/5
tmpd_lag713 <- (LAG_tmpd[,8]+LAG_tmpd[,9]+LAG_tmpd[,10]+LAG_tmpd[,11]+LAG_tmpd[,12]+LAG_tmpd[,13]+LAG_tmpd[,14])/7
4

2 に答える 2

1

filterこれは、たとえば次のように実行できます。

f <- function(vec, lags) {
    weights <- rep(0, max(lags))
    weights[lags] <- 1
    filter(vec, filter=weights/length(lags), sides=1)
}

tmpd_lag26 <- f(tmpd, c(3, 4, 5, 6, 7))
于 2012-12-01T21:48:36.393 に答える
1

あなたはかなり短いものであなたの結果を複製することができます

    m <- length(tmpd)
    lagmat <- matrix(rep(NA,m*14), nrow=m)
    for (i in 1:14){ lagmat[ (i+1):m, i] <- tmpd[1:(m-i)] }

    tmpd_lag01  <- rowMeans( lagmat[ , 1:2 ] )
    tmpd_lag26  <- rowMeans( lagmat[ , 3:7 ] )
    tmpd_lag713 <- rowMeans( lagmat[ , 8:14] )

実際、あなたが呼んtmpd_lag01でいるものは、値の遅れた1つの期間と遅れた2つの期間の平均を計算することに注意してください。これは、少し奇妙な表記を見つけます。これが実際には必要なものではなく、代わりに移動平均に最新のデータを含めたい場合、最初のコードは次のようになります。

    m <- length(tmpd)
    lagmat <- matrix(rep(NA,m*15), nrow=m)
    for (i in 1:15){ lagmat[ i:m, i] <- tmpd[1:(m-i+1)] }
于 2012-12-02T01:26:46.800 に答える