2017-11-03 12 views
0

私は運が少しでも答えを探すのにかなりの時間を費やしました。私はいくつかの時系列データを持っており、そのデータのn番目の行ごとにローリング平均を作成して作成する必要があります。これは動物園で可能で、おそらくhmiscのように見えますが、私は確かに他のパッケージです。私は1,2,3,3,4,5、そして5,6,7のように行を平均化する必要があります。私のデータは、このようなように見え、観測の数千人を持っています時差データを遅らせて要約する

id time x.1 x.2 y.1 y.2 
10  1  22  19  0  -.5 
10  2  27  44  -1  0 
10  3  19  13  0  -1.5 
10  4  7  22  .5  1 
10  5  -15 5  .33 2 
10  6  3  17  1  .33 
10  7  6  -2  0  0 
10  8  44  25  0  0 
10  9  27  12  1  -.5 
10  10 2  11  2  1 

私が完了時、それは次のようになりたい:時間VAR 1が実際に倍平均1,2,3-だろう

id time  x.1  x.2  y.1  y.2 
10 1  22.66 25.33 -.33 -.66 
10 2  3.66 13.33 .27  .50 

2つは平均して3,4,5であるが、この時点では時間varは維持することは重要ではない。私はidによってグループ化する必要があり、最終的に変更されます。私がこれをうまくやり遂げる方法を見つけ出す唯一の方法は、Lag()を使用して新しい行を1つずつ、もう1つを2つずつ作成してから、各列に平均を取ることでした。その後、あなたは私が新しいデータを収集し、特にとして、とんでもないだろう、各VARのためにこれを行うには... 123および345を使用して、234を削除

1 NA NA 
    2 1 NA 
    3 2 1 
    4 3 2 
    5 4 3 

他のすべての行を削除する必要があります。

助けが大いに評価されるでしょう

答えて

0

何かのこのような?

# sample data 
id <- c(10,10,10,10,10,10) 
time <- c(1,2,3,4,5,6) 
x1 <- c(22,27,19,7,-15,3) 
x2 <- c(19,44,13,22,5,17) 

df <- data.frame(id,time,x1,x2) 

means <- data.frame(rollmean(df[,c(1,3:NCOL(df))], 3)) 

means <- means[c(T,F),] 
means$time <- seq(1:NROW(means)) 
row.names(means) <- 1:NROW(means) 

> means 
    id  x1  x2 time 
1 10 22.666667 25.33333 1 
2 10 3.666667 13.33333 2 
関連する問題