2012-07-20 64 views
0

以前的值我有存储与观测的数据帧获取的变量

> m 

    ID  Date count Day Month 
1 111 2011-05-22  0 Sun May 
2 111 2011-05-23  5 Mon May 
3 111 2011-05-24  5 Tue May 
4 111 2011-05-25  2 Wed May 
5 111 2011-05-26  2 Thu May 
6 112 2011-05-22  2 Sun May 
7 112 2011-05-23  2 Mon May 
8 112 2011-05-24  1 Tue May 
9 111 2011-05-25  0 Wed May 
10 112 2011-05-26  6 Thu May 

我需要添加一对夫妇加过去的值的列的“计数”对应的ID和日期变量。例如,对于ID 111,我需要计算一天前,两天前,三天前计数或每个日期的任何其他时间范围以及相应的每个ID的总和。

所需的输出会像

> m 

    ID  Date count Day Month TwoDaysSum ThreeDaysSum 
1 111 2011-05-22  0 Sun May   NA   NA 
2 111 2011-05-23  5 Mon May   NA   NA 
3 111 2011-05-24  5 Tue May   5   NA 
4 111 2011-05-25  2 Wed May   10   10 
5 111 2011-05-26  2 Thu May   7   7 
6 112 2011-05-22  2 Sun May   NA   NA 
7 112 2011-05-23  2 Mon May   NA   NA 
8 112 2011-05-24  1 Tue May   4   NA 
9 111 2011-05-25  0 Wed May   3   5 
10 112 2011-05-26  6 Thu May   1   3 

最后,我要回去找总和为像月/季度/年的较大的时间框架。

有没有人有一个想法如何去呢?

+0

只有一个投票:我不清楚你的TwoDaysSum或ThreeDaysSum列实际计算的是什么。你能告诉我们如何计算预期值吗?那么也许我们可以帮助弄清楚如何处理整个数据框架。 – 2012-07-20 20:04:51

+0

听起来像''rollapply'从'xts'的案例。 – Chase 2012-07-20 20:14:34

+0

Jeff,count计算特定事件发生在给定地点(ID)和给定日期(日期)的次数。我需要弄清楚的是,在每个ID的最后7天,14天,每月,每年发生多少次这种事件。 这有帮助吗? – Godel 2012-07-20 21:25:21

回答

0
DF<-read.table(text=" ID  Date count Day Month 
1 111 2011-05-22  0 Sun May 
2 111 2011-05-23  5 Mon May 
3 111 2011-05-24  5 Tue May 
4 111 2011-05-25  2 Wed May 
5 111 2011-05-26  2 Thu May 
6 112 2011-05-22  2 Sun May 
7 112 2011-05-23  2 Mon May 
8 112 2011-05-24  1 Tue May 
9 112 2011-05-25  0 Wed May #fixed typo 
10 112 2011-05-26  6 Thu May",header=T,stringsAsFactors = F,sep="") 

#sort to be safe 
DF<-DF[order(DF$ID,DF$Date),] 

DF$TwoDaysSum<-ave(DF$count,DF$ID,FUN=function(x) filter(x,c(0,1,1),sides=1)) 
DF$ThreeDaysSum<-ave(DF$count,DF$ID,FUN=function(x) filter(x,c(0,1,1,1),sides=1)) 

DF 

    ID  Date count Day Month TwoDaysSum ThreeDaysSum 
1 111 2011-05-22  0 Sun May   NA   NA 
2 111 2011-05-23  5 Mon May   NA   NA 
3 111 2011-05-24  5 Tue May   5   NA 
4 111 2011-05-25  2 Wed May   10   10 
5 111 2011-05-26  2 Thu May   7   12 
6 112 2011-05-22  2 Sun May   NA   NA 
7 112 2011-05-23  2 Mon May   NA   NA 
8 112 2011-05-24  1 Tue May   4   NA 
9 112 2011-05-25  0 Wed May   3   5 
10 112 2011-05-26  6 Thu May   1   3