首页 > 解决方案 > 根据日期聚合变量

问题描述

我有一个包含很多日期点和数据点的大数据集。有关最小示例,请参见此处。

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)。简而言之:如果有更新,则获取此更新和上次更新(或第一个数据点)之间的所有数据并聚合它们。

提前致谢。

标签: r

解决方案


和相关包中的和 之类的函数aggregate以及tapply工具将为您进行聚合。但是这些都需要一个变量来定义要聚合的组。plyrdplyr

对于您的简单示例,您可以使用以下代码创建分组变量:

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
> 

推荐阅读