Calculating Inter-purchase Time in R

r

Solution

You can use `plyr`:

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

or `ave`:

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

Both give

#   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

P.S.: you might want to replace these zeroes with `NA`.

Problem

I have the following data frame: ``` 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 ``` Now I need to calculate the inter-purchase time of transactions for each id (the number of days between each transaction of a customer and the previous transaction by the same customer); so that I get the following result: ``` 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 ``` I wonder if anyone can help me with this.

Original source