【发布时间】:2015-04-27 14:33:24
【问题描述】:
我有一个如下所示的数据框(客户):
email order_no date
a@stack.com 0012 2014-02-13
a@stack.com 0013 2014-03-13
a@stack.com 0014 2014-06-13
b@stack.com 0015 2014-05-13
b@stack.com 0016 2014-05-20
b@stack.com 0017 2014-07-20
我想为每个客户创建一个附加订单间隔的新字段。第一步是按日期升序排序:
customer <- arrange(customer, date)
下一步将遍历每个客户并计算订单间隔,因此结果集如下所示:
email order_no date days_interval
a@stack.com 0012 2014-02-13 0
a@stack.com 0013 2014-03-13 30
a@stack.com 0014 2014-06-13 90
b@stack.com 0015 2014-05-13 0
b@stack.com 0016 2014-05-20 7
b@stack.com 0017 2014-07-20 60
可以不使用 for 循环来实现吗? 这样做最有效的方法是什么。
使用 FOR 循环,您可以这样做:
for (i in 2:nrow(customer)){
if(customer$email[i]==customer$email[i-1]){
customer$interval[i] <- as.integer(difftime(customer$date[i],customer$date[i-1]))
}
}
不使用 for 循环是否可行?
【问题讨论】:
-
两个数据框不匹配。例如,订单
0016在顶部数据框中是2014-06-13,在底部是2014-05-20。 -
我的错误。进行更新