【问题标题】:Calculating churn in R data frame: Data calculation in R在 R 数据框中计算流失率:R 中的数据计算
【发布时间】:2016-03-09 10:03:44
【问题描述】:

您好,我有一个数据框,第一列包含客户名称/ID,M0:M100 列表示从加入当月收到的收入。下面的小样本:

我需要为数据框逐月计算收入流失率(M0 到 M100):

当客户在 M2 中具有非零值并且所有未来月份的总和为 0 时,客户在一个月内流失,例如 M3。例如 M2!=0 & Sum (M3:Mn)==0。在这种情况下,M3 中的流失价值是我们在 M2 中从客户那里获得的收入。

customer<-c("Robin","Tim","John","Casey","Jack")
M0<-c(234,21,22,22,32)
M1<-c(33,33,232,221,322)
M2<-c(3,2,25,98,100)
M3<-c(0,2,0,98,0)
M4<-c(3,0,0,0,0)
df=data.frame(customer,M0,M1,M2,M3,M4)

Output:
       M0 M1 M2 M3 M4
Churn  0  0  0 125 100

M3 月:Jack 和 John 流失(分别为 100 和 25 值) M4 月:Tim 和 Casey 流失(分别为 2 和 98 值)

而且罗宾仍然活跃。需要为大量数据而苦苦挣扎。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这应该为您提供上一个活跃月份的信息:

    library(reshape)
    library(dplyr)
    df %>% melt(id="customer") %>% group_by(customer) %>% 
    mutate(month=as.numeric(substr(variable, 2,5)), maxmonth=max(month[value!=0])) %>% 
    filter(month==maxmonth)
    

    结果:

      customer variable value month maxmonth
        (fctr)   (fctr) (dbl) (dbl)    (dbl)
    1     John       M2    25     2        2
    2     Jack       M2   100     2        2
    3      Tim       M3     2     3        3
    4    Casey       M3    98     3        3
    5    Robin       M4     3     4        4
    

    当然,你可以从那里选择值。

    编辑:

    如果您想查看每月流失值的总和,可以这样做(df2 是上一步的结果):

    df2 %>% mutate(month=month+1) %>% group_by(month) %>% summarise(sum=sum(value))
    

    结果:

      month   sum
      (dbl) (dbl)
    1     3   125
    2     4   100
    3     5     3
    

    当然最后一行表示上个月活跃客户的值,因此可以跳过。

    【讨论】:

    • 您能解释一下我该如何选择...例如,我如何在 M3 中找到搅动的价值?
    • 您想生成每月的流失值总和吗?如果是这样,只需添加 %>% group_by(variable) %>% summarise(sum=sum(value)) - 编辑答案。
    猜你喜欢
    • 1970-01-01
    • 2018-06-18
    • 2013-09-27
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2018-10-26
    相关资源
    最近更新 更多