获取变量的先前值

时间:2012-07-20 19:10:28

标签: r

我有一个数据框,观察结果存储为

> 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

最终我需要回去找一个更大的时间范围的总和,比如月/季/年。

有人知道如何去做吗?

1 个答案:

答案 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