首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R的一栏中获得所有日期的平均购货时间

在R的一栏中获得所有日期的平均购货时间
EN

Stack Overflow用户
提问于 2017-05-02 12:23:34
回答 4查看 1.2K关注 0票数 1

我目前正在为R中的流失数据集开发一个时间框架,为了这样做,我需要每个客户的平均相互购买时间。

下面的示例数据显示了两个客户(客户1和2)分别在3和2不同的场合购买。客户1的平均购买时间为7.5天((9+6)/2),而客户2的平均购买时间仅为5天,因为该客户只有两个观察结果。在代码中,如下所示:

代码语言:javascript
复制
df <- data.frame(cust_id=c(1,2,1,2,1), 
    order_date=as.Date(c("2012-8-14", "2012-7-1", "2012-8-23", "2012-7-6" 
    "2012-8-29")))

从图形上看,它看起来是这样的:

代码语言:javascript
复制
    cust_id    order_date
1   1          2012-8-14 
2   2          2012-7-1
3   1          2012-8-23
4   2          2012-7-6
5   1          2012-8-29

最后我想让它看起来像这样:

代码语言:javascript
复制
    cust_id    avg_interpurchase_time
1   1          7.5 
2   2          5

有人能指向我正确的方向吗?

谢谢!

我看了以下的帖子:Calculating Inter-purchase Time in R,但我想我的问题不同于在那里提出的问题。我有所有的日期在一栏和一个客户可以有多达80个日期,而张贴的人,只有两个日期为每个客户分散超过2列。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-05-02 12:52:33

在基本R中,可以将aggregate与自定义函数一起使用:

代码语言:javascript
复制
aggregate(order_date ~ cust_id, data=df, FUN=function(x) mean(diff(x)))
  cust_id order_date
1       1       7.5 
2       2       5.0 

在这里,我们根据订购日期取差额,然后计算平均值。注意,这需要按日期对数据进行排序。可以通过将order包含在对data.frame的调用中来确保这是正确的,例如在data=df[order(df$order_date),]中。

数据

包括OP中的几处错误更正。

代码语言:javascript
复制
df <- 
structure(list(cust_id = c(1, 2, 1, 2, 1), order_date = structure(c(15566, 
15522, 15575, 15527, 15581), class = "Date")), .Names = c("cust_id", 
"order_date"), row.names = c(NA, -5L), class = "data.frame")
票数 1
EN

Stack Overflow用户

发布于 2017-05-02 12:31:45

可以使用dplyr:

代码语言:javascript
复制
df %>% group_by(cust_id) %>% summarise(avg_internetpurchase_time = mean(diff(order_date)))
票数 2
EN

Stack Overflow用户

发布于 2017-05-02 12:34:55

这是dplyr解决方案。请注意,您在第二次购买cust_id 2的年份做了一个错误,因此它平均为371,而不是5。

代码语言:javascript
复制
library(dplyr)
df %>% group_by(cust_id) %>% arrange(order_date) %>% mutate(dif = order_date - lag(order_date)) %>% 
  summarise(avg_purchase = mean(dif, na.rm = TRUE))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43737821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档