dpylr包是tidyverse中的一员,可用于处理R内部或者外部的结构化数据,相较于plyr包,dplyr专注于数据框(dataframe)对象, 大幅提高了速度,并且提供了更稳健的数据库接口,。同时,dplyr包可用于操作Spark的dataframe。
学习资料:tidyverse官方学习文档part5
本文主要记录5个重点函数的学习,分别是
filter()
arrange()
select()
mutate()
summarise()
library(dplyr) # 载入包
data(mtcars) # 载入数据集
可以按给定的逻辑条件筛选出符合要求的子数据集,第一个参数为数据集,之后的参数为匹配条件
filter(mtcars, cyl == 4) # 返回cyl=4的观测
filter(mtcars, cyl < 6)
filter(mtcars, cyl < 6 & vs == 0) #返回cyl<6且vs=0的观测
filter(mtcars, cyl < 6 & !vs == 0) # 返回cyl<6且 vs不为零的观测
filter(mtcars, cyl == 4 | cyl == 8) # 返回cyl=4和8的观测
逻辑运算符的表示如下
slice(mtcars, 1L) # 返回第一行
filter(mtcars, row_number() == 1) # 与上一行等价
slice(mtcars, n()) # 返回最后一行
slice(mtcars, 1:5L) # 返回1到5行
filter(mtcars, between(row_number(), 1, 5)) # 与上一行等价
arrange(.data, ...)
对指定的列进行升序排列,用desc()进行降序排列
arrange(mtcars, cyl, disp) # 用cyl和disp进行联合升序排序
arrange(mtcars, desc(disp)) # 按照进行disp进行降序排序
缺失值会被排序在末尾
select(.data, ...)
按列搜索,返回符合条件的所有样本的列
select(mtcars, disp, drat) # 选取disp和drat列
select(mtcars, hp:am) # 选取从hp到am的列
select(mtcars, -(hp:am)) # 删除从hp到am的列
select(mtcars, starts_with('dis')) # 选取以dis开头的变量
select(mtcars, -starts_with('dis')) # 选取开头不为dis的变量
select(mtcars, ends_with('at')) # 选取以at结尾的变量
select(mtcars, -ends_with('at')) # 选取结尾不为at的变量
select(mtcars, contains('s')) # 选取含有s的变量
select(mtcars, -contains('s')) # 选取列名中不含有s的变量
select(mtcars, matches('.s.')) # 选取列名中间含有s的变量
select(mtcars, matches('.s')) # 选取列名中含有s的变量
select(mtcars, vs, drat, everything()) # 将变量vs、drat放到前面,更改变量顺序
## 重命名
select(mtcars, Disp = disp) # 将列名disp改为Disp,只返回这一列
rename(mtcars, Disp = disp) # 将列名disp改为Disp,返回所有列
mutate(.data, ...)
对已有数据进行计算整理并添加为新列
mutate(mtcars, disp_1 = disp/100) # 在列尾增加新列disp_1
mutate(mtcars, disp_1 = sqrt(disp), wt_1 = wt*2, a = disp_1*wt_1) # 可以用新列进行计算生成新新列
transmute(mtcars, diap_1 = sqrt(disp)) #只保存新列
运算符号
类型 | 举例 | 说明 |
---|---|---|
运算符 | +-*/^ | —— |
整除 | %/% 整除、%% 余数 | —— |
对数 | log()、log2()、log10() |
—— |
滞后函数 | lag()向前、lead()向后 | —— |
累计函数 |
cumsum()累计求和, cumprod()累计内积和, cummin()累计最小值 cummax()累计最大值,summean()累计平均值 |
—— |
逻辑运算符 | <, <=, >, >=, != | —— |
排序 | min_rank()、row_number(), dense_rank(), percent_rank(), cume_dist(), ntile() |
summarise(.data, ...)
对数据框调用函数进行汇总操作
summarise(mtcars, mean(disp)) # 返回disp的均值
summarise(mtcars, mean(disp), max(disp)) # 返回disp均值,最大值
summarise(group_by(mtcars, cyl), mean(disp)) # 返回不同cyl水平下的disp均值
mtcars %>%
group_by(cyl) %>%
summarise(mean(disp)) # 运用管道符,简化代码,与上面等价
管道符是个好工具