[英]lag and summarize time series data
我花了大量時間尋找運氣不好的答案。 我有一些時間序列數據,需要折疊並在該數據的第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
我希望完成后看起來像這樣:
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
時間var 1實際上是平均1,2,3的時間,而2將是3,4,5的平均,但是在這一點上,時間var並不重要。 我需要按ID分組,因為它最終會改變。 我能弄清楚如何成功完成此操作的唯一方法是使用Lag()並使新行以1開頭,另一行以2開頭,然后取各列的平均值。 之后,您必須刪除其他所有行
1 NA NA
2 1 NA
3 2 1
4 3 2
5 4 3
使用123和345並刪除234 ...對每個變量執行此操作將非常令人討厭,尤其是當我收集新數據時。
有任何想法嗎? 幫助將不勝感激
像這樣的東西?
# 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.