【问题标题】:Determining Average buying cycle for customer in R在 R 中确定客户的平均购买周期
【发布时间】:2015-09-23 09:41:36
【问题描述】:

我是 R 编程新手。 我有每个客户的发票详细信息,日期和想知道每个客户的平均购买周期。数据是这样的:

----------------------------
|Cust_no |Invoice_no | Date|
----------------------------

| C001   |    W012    | 4/1/2015 
-----------------------------------
| C001  |  W234   |   4/11/2015
-----------------------------------
|C001 |    W321   |     5/1/2015
-----------------------------------
|C002   | W131    |   4/1/2015
----------------------------------
|C002  |  W245    |   4/13/2015
----------------------------------
|C003  |  W047    |   3/18/2015
----------------------------------

因此,对于每个客户,代码应将连续日期之间的差值相加并除以 (n-1)。 n = 没有。每个客户的交易量。如果只有一个交易存在,那么我想输出一个默认编号。 (比如 45 天)

获得平均后的下一步。每个客户的购买周期(C),我想看看哪个客户的购买周期正在接近(发送通知) 例子: 在以下情况下将“购买期临近”标记为“1”: (C-2)*n

假设今天是 2015 年 5 月 15 日,那么我们将有以下输出。

预期输出 对于客户 C001,平均购买周期为 = (10+20)/(3-1)= 15 天。 对于客户 C002,平均购买周期为 = (10)/(2-1)= 10 天 对于客户 C003,距离只有一笔交易的 45 天,默认值为 45。

---------------------------------------------------------------------------
|Cust_no |Buying_cycle|last_invoice_date|time_since_last_inv|buy_perd_near
---------------------------------------------------------------------------

| C001  |    15    | 5/1/2015 |14 | 1
---------------------------------------------------------------------------
| C002  |  12  |   4/13/2015 |32 | 0
---------------------------------------------------------------------------
| C003  |    45   |  3/18/2015 |68 | 0
---------------------------------------------------------------------------

我面临着寻找平均值的挑战。购买期。一旦我能得到平均值。购买期,我可以应用逻辑来判断购买期是否临近。

注意:原始数据不会按客户或升序/降序排序。

{

structure(list(cust_no = structure(c(1L, 1L, 1L, 2L, 2L, 3L), .Label = c("c001", 
"c002", "c003"), class = "factor"), inv_no = structure(c(1L, 
3L, 4L, 2L, 6L, 5L), .Label = c("w015", "w087", "w167", "w231", 
"w234", "w456"), class = "factor"), date = structure(c(1L, 2L, 
5L, 1L, 3L, 4L), .Label = c("2015-4-1", "2015-4-11", "2015-4-13", 
"2015-4-17", "2015-5-1"), class = "factor")), .Names = c("cust_no", 
"inv_no", "date"), row.names = c(NA, -6L), class = "data.frame")

}

【问题讨论】:

  • 欢迎来到 SO。请以其他人易于导入的格式和预期的输出提供您的数据。感谢您为解决您的问题所做的一些努力。以下是有关创建 reproducible example 的更多信息。
  • 从这里开始 [statmethods.net/] 在导入数据中
  • 嗨,@Dipesh。您是否成功地将数据放入 data.frame 甚至矩阵甚至一系列向量中?我看到您非常努力地制作一些数据,但我认为这不是您的实际数据。在您担心平均购买期计算之前,我们需要对您的数据进行排序。如果您有数据,您可以将其粘贴到页面中,我们可以从那里为您格式化。

标签: r date


【解决方案1】:

由于您没有可重复的数据,我将发布步骤以实现您想要的结果,而不是整个代码

您可以将日期转换为天数:

library(lubridate)
x <- c("02/01/2000", "20/02/2000", "12/12/2000", "13/01/2001")
date <- dmy(x)

现在使用diff 对基数 R 的排序向量来获得连续值之间的差异:

diff(date)

然后求它的平均值。

【讨论】:

  • 购买周期=sum(diff(date))/length(date)-1。我如何为每个客户做这件事。我猜需要一些循环。
  • @Dipesh 请寻找applysappylapply
猜你喜欢
  • 2018-05-01
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
相关资源
最近更新 更多