R语言按日期与参与者分组求和及累计积分计算问题
R语言投注数据处理解决方案
我们使用R生态中最常用的入门友好数据处理包dplyr完成需求,未安装的话先执行安装加载命令:
install.packages("dplyr") library(dplyr)
1. 按日期、参与者分组求和单日积分
对相同Date、Participants的行做合并,对Points列求和,代码如下:
# 先将字符型日期转为标准日期格式,避免后续排序逻辑出错 bet$Date <- as.Date(bet$Date, format = "%d-%m-%Y") # 分组求和 bet_daily <- bet %>% group_by(Date, Participants) %>% summarise(Daily_Points = sum(Points), .groups = "drop")
运行后得到的bet_daily完全匹配你给出的示例结果:2020-06-11的Mike单日积分2、Paul单日积分4、Sarah单日积分6,后续日期的单日积分也会按规则计算。
2. 计算各参与者的累计积分
在单日汇总结果的基础上,按参与者分组、按日期升序排列后做累加即可:
bet_cum <- bet_daily %>% group_by(Participants) %>% arrange(Date) %>% mutate(Cumulative_Points = cumsum(Daily_Points)) %>% ungroup()
最终结果样例如下:
| Date | Participants | Daily_Points | Cumulative_Points |
|---|---|---|---|
| 2020-06-11 | Mike | 2 | 2 |
| 2020-06-11 | Paul | 4 | 4 |
| 2020-06-11 | Sarah | 6 | 6 |
| 2020-06-12 | Mike | 6 | 8 |
| 2020-06-12 | Paul | 0 | 4 |
| 2020-06-12 | Sarah | 2 | 8 |
| 2020-06-13 | Mike | 12 | 20 |
| 2020-06-13 | Paul | 10 | 14 |
| 2020-06-13 | Sarah | 12 | 20 |
和你举例的Mike累计积分逻辑完全一致。
内容的提问来源于stack exchange,提问作者Astro
相关产品推荐
相关产品推荐

