我有一个包含大量日期点和数据点的大数据集。请参阅此处以获取最小的示例。
Date x y id update-size
01.01 1 1 1
01.02 2 3 1 2345
01.03 4 2 1
01.01 5 7 2 3654
01.02 2 6 2
01.03 3 2 2 4789
我想在每次软件更新之间聚合数据(x,y)。换句话说:如果有更新,请获取此更新与上次更新(或第一个数据点)之间的所有数据并进行聚合。
提前致谢。
答案 0 :(得分:0)
aggregate
和tapply
等功能以及plyr
,dplyr
及相关套餐中的工具都会为您进行汇总。但是这些都期望一个变量来定义要聚合的组。
对于您的简单示例,您可以使用以下代码创建分组变量:
group <- cumsum(!is.na(mydata[['update-size']])
如果您有更新日期,则另一个选项是使用findInterval
功能。
示例:
> mydata <- data.frame(Date=c('01.01','01.02','01.03','01.01','01.02','01.03'),
+ x=c(1,2,4,5,2,5),
+ y=c(1,3,2,7,6,2),
+ id=c(1,1,1,2,2,2),
+ update.size =c(NA,2345,NA,2345,NA,4789)
+ )
>
> group <- cumsum(!is.na(mydata$update.size))
>
> # above aggregates with values after update
> # this line changes to aggregate with before
> group[ !is.na(mydata$update.size) ] <- group[ !is.na(mydata$update.size) ] -1
>
>
> aggregate(mydata[,2:4], list(group), FUN=sum)
Group.1 x y id
1 0 3 4 2
2 1 9 9 3
3 2 7 8 4
>