Расчет скользящей средней с разными кодами и разными размерами

У меня есть фрейм данных, который содержит данные для разных наблюдений, где наблюдения сгруппированы с уникальным кодом. В качестве воспроизводимого примера, вот как выглядит смоделированные данные:

v <- c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6)
mat1 <- matrix(runif(200),40)
mat1 <- cbind(v,mat1)
mat1 <-as.data.frame(mat1)
names(mat1) <- c('code','x1','x2','x3','x4','x5')
unq <- unique(mat1$code)

Я хотел бы рассчитать среднее значение для каждого наблюдения на основе двух предыдущих и двух будущих наблюдений (вы можете думать об этом как о временном ряду). Так например

mat1$X1[3] = mean(mean(mat1$x1[1:5])mat1$X1[4] = mean(mean(mat1$x1[2:6])

и так далее. Я могу сделать расчет с использованием определенного кода (например, когда mat1$code==1):

K <- data.frame(code=mat1$code,x1=rep(0,40),x2=rep(0,40),x3=rep(0,40),x4=rep(0,40),x5=rep(0,40))
for ( i in 3:(nrow(mat1)-2)){
  if(mat1$code[i]==unq[1]){
    K[i,2] <- mean(mat1[i-2:i+2,2]) 
  }
}

, но есть две вещи, которые я не мог понять:

(1) Поскольку фактический набор данных намного больше, чем смоделированный, как я могу динамически пройти через все уникальные коды и выполнить вычисления, отметив, что первые и последние два наблюдения каждого уникального кода должны быть равны нулю (и я в конечном итоге буду Избавься от них).

(2) Количество наблюдений для каждого уникального кода различно, и некоторые из них меньше чем 4, где в этом случае не может быть никакого вычисления для этого кода!

Любая помощь высоко ценится.

Спасибо

0 ответов

Другие вопросы по тегам