⚡
dplyr 是 R 语言中最强大的数据操作包之一。
通过管道符 %>% 连接多个操作,
让代码清晰易读。掌握这 5 个核心函数,就能解决 80% 的数据处理需求!
1. filter() — 按条件筛选行
根据指定条件保留或过滤数据行
library(dplyr) # 单条件筛选:加不加引号都可以 mtcars %>% filter(gear == "3") %>% head() mtcars %>% filter(gear == 3) %>% head() # 多条件筛选 mtcars %>% filter(carb >= 4) %>% head() # 组合条件 mtcars %>% filter(gear == 4 & hp > 100)
💡 提示:支持逻辑运算符 &(且)、|(或)、!(非)
2. arrange() — 行排序
对数据行进行排序,默认升序
# 单列升序 mtcars %>% arrange(disp) %>% head() # 多列排序:先按hp升序,再按mpg降序 mtcars %>% arrange(hp, desc(mpg)) %>% head() # 使用 desc() 降序排列 mtcars %>% arrange(desc(wt)) %>% head()
📌 注意:NA 值默认排在最后,可以使用 na.last = TRUE/FALSE 控制
3. select() — 选择列
选择指定的列,支持模糊匹配
# 手动选择列 mtcars %>% select(hp, mpg, disp) %>% head() # 模糊匹配辅助函数 iris %>% select(contains("Sep")) %>% head() # 调整列顺序 + everything() iris %>% select(Petal.Width, Species, everything()) %>% head()
select 辅助函数:
starts_with("abc") 匹配开头ends_with("xyz") 匹配结尾contains("ijk") 包含字符matches("regex") 正则表达式num_range("x", 1:3) x1, x2, x3everything() 所有剩余列4. mutate() — 添加/修改列
添加新列或修改现有列
# 简单计算 iris %>% mutate(Sepal.Length_width = Sepal.Length + Sepal.Width) %>% head() # 复杂公式 iris %>% mutate( Sepal.Length_norm = Sepal.Length / mean(Sepal.Length, na.rm = TRUE), Sepal_Ratio = Sepal.Length / Sepal.Width ) %>% head()
💡 技巧:mutate 中可以使用 across() 对多列进行批量操作
5. summarize() — 汇总统计
对数据进行汇总,常与 group_by 联用
# 基本汇总 mtcars %>% summarise( mean_disp = mean(disp), n = n(), sum_disp = sum(disp) ) # 分组汇总 mtcars %>% group_by(cyl) %>% summarise( mean_disp = mean(disp), n = n(), total = sum(disp) ) # 多分组汇总 mtcars %>% group_by(cyl, vs) %>% summarise(mean = mean(disp), n = n())
常用汇总函数:
mean()
sum()
n()
n_distinct()
min()
max()
median()
sd()
🔥 进阶:分位数汇总
# 计算分组分位数 mtcars %>% group_by(cyl) %>% summarise( qs = quantile(disp, c(0.25, 0.75)), prob = c(0.25, 0.75) ) # 自定义分位数函数 my_quantile <- function(x, probs) { tibble(x = quantile(x, probs), probs = probs) } mtcars %>% group_by(cyl) %>% summarise(my_quantile(disp, c(0.25, 0.75)))
📝 dplyr 核心函数速查表
| 函数 | 功能 | 示例 |
|---|---|---|
| filter() | 筛选行 | filter(x > 10) |
| arrange() | 排序行 | arrange(x, desc(y)) |
| select() | 选择列 | select(a, b, everything()) |
| mutate() | 添加列 | mutate(new = x * 2) |
| summarise() | 汇总 | summarise(mean = mean(x)) |