前言
这部分介绍一下R语言中的聚合窗口函数,R语言中的聚合窗口函数与sql中的窗口函数有点差异,R语言中的相同记录的累计求和累计平均不再相同。
函数对比
仍是与sql对比介绍R语言中的聚合窗口函数,sql中的聚合窗口函数,既能实现普通聚合,也能实现加强版的累积聚合,R语言中也有与之一一对应的聚合函数:
函数使用
使用之前数据:
user_no | order_no | buy_date | amt |
---|---|---|---|
u01 | dadeca | 2019/1/1 | 100 |
u02 | xaefaw | 2018/6/5 | 100 |
u01 | daecaw | 2019/2/1 | 200 |
u02 | sdawfa | 2018/2/1 | 150 |
u01 | cwewca | 2019/3/1 | 200 |
u01 | wcawca | 2018/7/1 | 120 |
u02 | wdcbhf | 2019/3/1 | 500 |
u02 | qweace | 2019/1/1 | 300 |
u01 | ceasxa | 2018/12/1 | 300 |
u01 | xasaec | 2019/2/1 | 150 |
1 sum、cumsum函数
R语言中的sum和cumsum聚合函数与sql中的sum聚合函数相同,对分组求和和累计求和。R语言中的聚合函数是在sql基础上的改进,R语言中相同记录累计求和值不再相同。下面举例说明一下,计算每位客户消费总额以及按照购买时间的顺序累计消费总额:
消费总额:
data1 %>% group_by(user_no) %>% mutate(sum_amt = sum(amt)) %>% arrange(user_no, buy_date)
累计消费总额:
data1 %>% group_by(user_no) %>% mutate(cumamt = order_by(buy_date, cumsum(amt))) %>% arrange(user_no, buy_date)
R语言中的累计计算函数,当order_by的字段记录相同时候,累计值不再相同,而sql中当记录相同的时候,累计值是相同的【窗口函数】第三弹:聚合函数和分布函数,觉得这一点是很好的优化。下图是sql中的结果:
2 min、cummin函数
R语言中的min、cummin函数与sql中的min函数相同,计算组内最小值和累计最小值:
每位客户的历史上最小消费金额:
data1 %>% group_by(user_no) %>% mutate(min_amt = min(amt)) %>% arrange(user_no, buy_date)
按照购买时间计算每位客户的累计最小消费金额:
data1 %>% group_by(user_no) %>% mutate(cuminamt = order_by(buy_date, cummin(amt))) %>% arrange(user_no, buy_date)
3 max、cummax函数
R语言中的max函数和cummax函数与sql中的max函数相同,计算每组内最晚(大)或者累计最晚(大)的记录:
历史上每位客户的最大消费金额:
data1 %>% group_by(user_no) %>% mutate(max_amt = max(amt)) %>% arrange(user_no, buy_date)
按照购买时间计算每位客户的累计最大消费金额:
data1 %>% group_by(user_no) %>% mutate(cumaxamt = order_by(buy_date, cummax(amt))) %>% arrange(user_no, buy_date)
4 mean、cummean函数
R语言中的mean函数和cummean函数与sql中的avg函数相同,计算组内平均值和组内累计平均值,与sql区别的是:R语言中相同记录的累计值不同,而sql中相同记录累计值相同:【窗口函数】第三弹:聚合函数和分布函数
历史上每位客户的平均消费金额
data1 %>% group_by(user_no) %>% mutate(mean_amt = mean(amt)) %>% arrange(user_no, buy_date)
按照购买时间计算每位客户的累计平均值
data1 %>% group_by(user_no) %>% mutate(cumeanamt = order_by(buy_date, cummean(amt))) %>% arrange(user_no, buy_date)
5 n函数
R语言中的n函数与sql中的count函数相同,计算每组内记录总数:
历史上每位客户的消费次数
data1 %>% group_by(user_no) %>% mutate(cnt = n()) %>% arrange(user_no, buy_date)
总结
本节介绍了R语言中的聚合窗口函数,当累计求和和累计平均的时候,与sql中结果有点差异:sql中相同记录的累计值相同,而R语言中的累计值不在相同。