您好我有一个数据框(约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 :: aggregate ie:
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来分割数据然后应用聚合但我仍然会丢失其他列。
有更好的方法吗?我简要介绍了doco for xts库,但无法在他们的任何一个中看到直观的解决方案
*注意:因为我希望这适用于一些不同的事情,开始时间步骤和最终时间步骤可能会改变。随机时间步长的可能性,或有点规则的时间步骤,但缺少点。应用的FUN可能会有所不同(主要是总和或平均值)。以及我希望通过*
分割的字段编辑我找到了Hercules Apergis推动我朝正确方向前的解决方案。
newData <- Data1 %>% group_by(timeagg, Site) %>% summarise(Total = sum(Value))
finaldata <- inner_join(Data1,newData) %>% select(-DateTimes, - Value) %>% distinct()
原始的DateTimes列不是分组变量 - 它是时间序列,所以我添加了我的聚合时间的分组变量(这里:到最近的小时的时间)并对此进行了总结。问题是,如果我加入这个新专栏,我错过了那个小时有时间而不是小时的任何一点。因此,inner_join%&gt;%select%&gt;%distinct方法。 现在希望它可以用我的真实数据而不是数据!
答案 0 :(得分:0)
鉴于您对聚合的功能:
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
都会将值相加。然后inner_join通过datasets
变量合并这两个DateTimes
上共有的部分。由于我不完全确定你想要的输出是什么,这对初学者来说应该是一个很好的帮助。