【发布时间】:2017-05-21 05:27:52
【问题描述】:
我有以下数据集:
df = data.frame(cbind(user_id = c(rep(1, 4), rep(2,4)),
complete_order = c(rep(c(1,0,0,1), 2)),
order_date = c('2015-01-28', '2015-01-31', '2015-02-08', '2015-02-23', '2015-01-25', '2015-01-28', '2015-02-06', '2015-02-21')))
library(lubridate)
df$order_date = as_date(df$order_date)
user_id complete_order order_date
1 1 2015-01-28
1 0 2015-01-31
1 0 2015-02-08
1 1 2015-02-23
2 1 2015-01-25
2 0 2015-01-28
2 0 2015-02-06
2 1 2015-02-21
我正在尝试计算每个用户仅完成的订单之间的天数差异。理想的结果如下所示:
user_id complete_order order_date complete_order_time_diff
<fctr> <fctr> <date> <time>
1 1 2015-01-28 NA days
1 0 2015-01-31 3 days
1 0 2015-02-08 11 days
1 1 2015-02-23 26 days
2 1 2015-01-25 NA days
2 0 2015-01-28 3 days
2 0 2015-02-06 12 days
2 1 2015-02-21 27 days
当我尝试这个解决方案时:
library(dplyr)
df %>%
group_by(user_id) %>%
mutate(complete_order_time_diff = order_date[complete_order==1]-lag(order_date[complete_order==1))
返回错误:
Error: incompatible size (3), expecting 4 (the group size) or 1
对此的任何帮助都会很棒,谢谢!
【问题讨论】:
-
看来您可以尝试通过“user_id”应用
ff = function(complete, date) date - date[c(NA, cummax(complete * seq_along(complete))[-length(complete)])]之类的函数,其中“complete_order”和“order_date”分别作为“complete”和“date”传递。