3

次のデータフレームがあります。

id<-c(1,1,1,3,3,3)
date<-c("23-01-07","27-01-07","30-01-07","11-12-07","12-12-07","01-01-08")
df<-data.frame(id,date)
df$date2<-as.Date(as.character(df$date), format = "%d-%m-%y")


id    date      date2
1 23-01-07 2007-01-23
1 27-01-07 2007-01-27
1 30-01-07 2007-01-30
3 11-12-07 2007-12-11
3 12-12-07 2007-12-12
3 01-01-08 2008-01-01

ここで、各 ID のトランザクションの購入間隔 (顧客の各トランザクションと同じ顧客による前回のトランザクションの間の日数) を計算する必要があります。次の結果が得られるようにします。

id    date      date2  interpurchase.time
1 23-01-07 2007-01-23         0
1 27-01-07 2007-01-27         4 
1 30-01-07 2007-01-30         3
3 11-12-07 2007-12-11         0  
3 12-12-07 2007-12-12         1 
3 01-01-08 2008-01-01        20

誰かがこれで私を助けることができるのだろうか.

4

1 に答える 1

4

使用できますplyr

library(plyr)
ddply(df, "id", transform, inter.time = c(0, diff(date2)))

またはave:

transform(df, inter.time = ave(as.numeric(date2), id,
                               FUN = function(x)c(0, diff(x))))

どちらも与える

#   id     date      date2 inter.time
# 1  1 23-01-07 2007-01-23          0
# 2  1 27-01-07 2007-01-27          4
# 3  1 30-01-07 2007-01-30          3
# 4  3 11-12-07 2007-12-11          0
# 5  3 12-12-07 2007-12-12          1
# 6  3 01-01-08 2008-01-01         20

PS: これらのゼロを に置き換えたいと思うかもしれませんNA

于 2012-12-08T01:50:55.390 に答える