巧用R语言中各类聚合窗口函数
前言
这部分介绍一下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语言中的累计值不在相同。
- 那些 Shell、Awk 中自动隐式类型转换的“坑”
- 浏览器 HTTP 协议缓存机制详解
- 详解 Windows 下 Eclipse CDT 配置 C/C++ 编译环境
- 硬核乘法器的Verilog HDL 调用
- Web 自动化测试与智能爬虫利器:PhantomJS 简介与实战
- 浅谈 Scala 中下划线的用途
- Java 多线程之 Runnable VS Thread 及其资源共享问题
- 块RAM的Verilog HDL调用
- 玩转千位分隔符输出
- DCM 模块的Verilog HDL 调用
- Python RPC 远程调用脚本之 RPyC 实践
- CRC16 编码器的Verilog HDL 实现
- macOS 0-day漏洞详情披露,可被利用完全接管系统
- SPI 接口协议的Verilog HDL 实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法