我有一个数据框,其中包含不同观察的数据,其中观察结果使用唯一代码进行分组。作为可重现的示例,以下是模拟数据的外观:
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,在这种情况下,不能对该代码进行任何计算!
非常感谢任何帮助。
谢谢