r - 计算自加入 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
非常感谢您对此的帮助。
解决方案
我们可以用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)
推荐阅读
- arrays - 如何将书籍集合导出到 MongoDB 中的 csv?
- jquery - jQuery:选择所有选择元素,选择值仅以 ajax 发送
- c - C语言函数中的参数传递?
- javascript - 如何捕获多个复选框
- vb.net - Discord.Net 根据用户输入赋予角色
- java - 进程意外退出:构建失败并出现异常
- react-native - 如何将 StackNavigator 与 DrawerNavigator(ReactNavigation v5)一起使用?我正在为每个屏幕使用课程
- cordova - 带有“ionic cordova build android --prod”的错误消息“TypeError:无法读取未定义的属性'种类'”
- c++ - fmod() 在我的简单 C++ 银行程序中返回相同的值
- c# - 从控制台应用程序通过 HTTPS 调用 web api(两者都部署在 Windows Docker 中)