我有一个数据框,观察结果存储为
> 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和日期对应的'count'变量的过去值。例如,对于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 :(得分: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