Расчет времени покупки с первой транзакцией, вычтенной из контрольной даты - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть следующий фрейм данных

id <- c(1,1,2,2)
date <- c("2011-01-18","2011-01-31","2011-01-02","2011-01-15")
df <- data.frame(id,date)

id  date
1 2011-01-18
1 2011-01-31
2 2011-01-02
2 2011-01-15

Теперь я хотел бы рассчитать время между покупками первой транзакции с контрольной датой (2011-01-01), а вторая транзакция являетсяРазница между вторым и первым.Итак, я получаю следующий результат

id  date     interpurchase_time
1 2011-01-18  17
1 2011-01-31  13
2 2011-01-02  01
2 2011-01-15  13

Может кто-нибудь помочь мне с этим?Я просто новичок, это R

Спасибо

PS - я посмотрел на это Расчет времени между покупками в R , но здесь первая транзакция рассматривается как ноль, которыйя не хочу.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Также обратите внимание, что ответ в связанном вопросе, на который вы ссылаетесь, может быть изменен для решения вашей проблемы следующим образом:

library(plyr)
ddply(df, "id", transform, inter.time = diff(c(as.Date('2011-01-01'), date)))


  id       date inter.time
1  1 2011-01-18    17 days
2  1 2011-01-31    13 days
3  2 2011-01-02     1 days
4  2 2011-01-15    13 days

То есть, если вы сначала конвертируете свои даты, используя as.Date() при созданииваш фрейм данных:

id <- c(1,1,2,2)
date <- as.Date(c("2011-01-18","2011-01-31","2011-01-02","2011-01-15"))
df <- data.frame(id,date)
0 голосов
/ 30 сентября 2018

Вы можете использовать функцию lag для сравнения каждого date с предыдущим, для каждого id, но если нет предыдущей даты, вы можете использовать значение по умолчанию (2011-01-01 в вашем случае).

id <- c(1,1,2,2)
date <- c("2011-01-18","2011-01-31","2011-01-02","2011-01-15")
df <- data.frame(id,date)

library(dplyr)
library(lubridate)

df %>%
  group_by(id) %>%
  mutate(date = ymd(date),
         int_time = as.numeric(date - lag(date, default = ymd("2011-01-01")))) %>%
  ungroup()

# # A tibble: 4 x 3
#      id date       int_time
#   <dbl> <date>        <dbl>
# 1     1 2011-01-18       17
# 2     1 2011-01-31       13
# 3     2 2011-01-02        1
# 4     2 2011-01-15       13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...