您好我有一个数据框,第一列有客户名称/ ID,M0:M100列表示从加入月份收到的收入。以下小样本:
我需要为数据框计算收入流失月数(M0到M100):
客户在一个月内搅拌时说M3,他在M2中的非零值和所有未来月份的总和为0.例如M2!= 0&总和(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:杰克&amp;约翰流失(分别为100和25) 第M4个月:Tim&amp; Casey Churn(分别为2&amp; 98值)
罗宾仍然活跃。需要这样才能获得大量数据并陷入困境。
答案 0 :(得分:0)
这可以为您提供上次活跃月份的信息:
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
当然最后一行表示活跃客户的上个月的价值,因此可以跳过。