确定R中客户的平均购买周期

时间:2015-09-23 09:41:37

标签: r date

我是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< =自上次发票以来经过的天数< =(C + 2)* n n = 1,2,3 ......

假设今天是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")

}

1 个答案:

答案 0 :(得分:-1)

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

您可以将日期转换为日期编号:

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

现在在基数R的有序向量上使用diff,以获得连续值之间的差异:

diff(date)

找到它的平均值。