首页 > 解决方案 > 计算自加入 R 以来的平均客户购买次数

问题描述

我在 R 中有以下数据框,它显示了 4 位客户在四年内每年的购买次数。member_since变量显示客户加入公司的年份。

id<-c(1,2,3,4)
member_since<-c(2014,2016,2015,2014)
X2014<-c(2,0,0,3)
X2015<-c(3,0,4,2)
X2016<-c(3,2,3,4)
X2017<-c(2,3,6,0)
df<-data.frame(id,member_since,X2014,X2015,X2016,X2017)

 id    member_since X2014 X2015 X2016 X2017
 1         2014      2     3     3     2
 2         2016      0     0     2     3
 3         2015      0     4     3     6
 4         2014      3     2     4     0

现在我正在尝试创建一个新变量mean_purchase来计算每个客户每年的平均购买次数,从他/她加入的那一年开始。这意味着例如购买customer 2的总数应该除以 2,但购买customer 4的总和应该除以 4。

 id    member_since X2014 X2015 X2016 X2017 mean_purchase
 1         2014      2     3     3     2         2.5
 2         2016      0     0     2     3         2.5
 3         2015      0     4     3     6         4.33
 4         2014      3     2     4     0         2.25

非常感谢您对此的帮助。

标签: r

解决方案


我们可以用apply

df$mean_purchase <- apply(df[3:6], 1, function(x) round(sum(x)/sum(cumsum(x > 0) > 0), 2))
df$mean_purchase
#[1] 2.50 2.50 4.33 2.25

或使用rowCumsums来自matrixStats

library(matrixStats)
rowSums(df[3:6])/rowSums(rowCumsums(+(df[3:6] > 0)) > 0)

推荐阅读