簡體   English   中英

重新分組不規則的時間序列數據(帶有元數據)

[英]R aggregating irregular time series data by groups (with meta data)

嗨,我有一個數據幀(約400萬行),其中包含針對不同站點和事件的時間序列數據。

這是我的數據的粗略概念,顯然是在不同的規模上,我有幾個相似的時間序列,所以我將其保留為一般性,因為我希望能夠在不同情況下應用它

Data1 <- data.frame(DateTimes =as.POSIXct("1988-04-30 13:20:00")+c(1:10,12:15,20:30,5:13,16:20,22:35)*300,
                      Site = c(rep("SiteA",25),rep("SiteB",28)),
                      Quality = rep(25,53),
                      Value = round(runif(53,0,5),2),
                      Othermetadata =  c(rep("E1",10),rep("E2",15),rep("E1",10),rep("E2",18)))

我正在尋找的是一種簡單的方法,可以將數據分組並聚合到不同的時間步,同時保留組內不變的元數據

我試過使用Zoo Library和Zoo :: aggregate即:

library(zoo)
zooData <- read.zoo(select(Data1, DateTimes, Value))
zooagg <- aggregate(zooData, time(zooData) - as.numeric(time(zooData))%%3600, FUN = sum, reg = T)

但是,當我這樣做時,我將丟失所有元數據並合並不同的站點數據。

我想知道如何嘗試使用plyr或dplyr拆分數據,然后應用聚合,但我仍然會丟失其他列。

有一個更好的方法嗎? 我對xts庫的doco進行了簡要介紹,但是在兩者中都看不到直觀的解決方案

*注意:由於我希望此功能可用於一些不同的事情,因此開始時間步驟和最終時間步驟都可能會發生變化。 有可能出現隨機時間步長,或者有些規律的時間步長,但缺少分數。 並且所應用的FUN可能有所不同(主要是總和或平均值)。 以及我想用*分割的字段


編輯在大力神Apergis向正確的方向推動我之后,我找到了解決方案。

newData <- Data1 %>% group_by(timeagg, Site) %>% summarise(Total = sum(Value))
finaldata <- inner_join(Data1,newData) %>% select(-DateTimes, - Value) %>% distinct()

原始的DateTimes列不是分組變量-而是時間序列,因此我添加了匯總時間(這里是最近的小時數)的分組變量,並對此進行了總結。 問題是,如果我加入了這個新專欄,那么我會錯過該小時內有時間但沒有小時的所有時間點。 因此,inner_join%>%選擇%>%不同的方法。 現在希望它適用於我的真實數據而不是數據!

鑒於您具有聚合功能:

aggregate(zooData, time(zooData) - as.numeric(time(zooData))%%3600, FUN = sum, reg = T)

您要按時間組對值求和,並且不要丟失其他列。 您只需使用dplyr軟件包即可:

library(dplyr)
newdata   <- Data1 %>% group_by(DateTimes) %>% summarise(sum(Value))
finaldata <- inner_join(Data1,newdata),by="DateTimes")

newdata是一個data.frame ,每組DateTimes的Values相加。 然后,inner_join通過DateTimes變量合並在這兩個datasets上通用的部分。 由於我不確定您想要的輸出是什么,因此對於初學者來說應該是一個很好的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM