根据日期

时间:2018-05-30 14:32:57

标签: r

我有一个包含大量日期点和数据点的大数据集。请参阅此处以获取最小的示例。

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)。换句话说:如果有更新,请获取此更新与上次更新(或第一个数据点)之间的所有数据并进行聚合。

提前致谢。

1 个答案:

答案 0 :(得分:0)

aggregatetapply等功能以及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
>