R语言中的dplyr包函数总结

dplyr是R语言中一个非常强大的数据操作包,特别适用于数据清洗和数据转换。本文将总结dplyr包的主要函数及其用法,并给出相应的示例代码,帮助大家更好地掌握dplyr的使用。

一、单表部分
1. 对行的操作
  • filter():根据条件筛选数据行。
  • arrange() :对数据行进行排序。默认升序排列,若想设置为降序,可使用函数desc()
  • distinct():去除重复的行。
  • slice() 系列函数:按行位置筛选。

示例代码:

r 复制代码
library(dplyr)

# 创建示例数据框
df <- data.frame(
  name = c("Alice", "Bob", "Carol", "Alice"),
  score = c(85, 90, 78, 85)
)

# filter() 示例
df_filtered <- df %>% filter(score > 80)

# arrange() 示例
df_arranged <- df %>% arrange(score)
df_arranged_desc <- df %>% arrange(desc(score))

# distinct() 示例
df_distinct <- df %>% distinct()

# slice() 示例
df_sliced <- df %>% slice(1:2)
2. 对列的操作
  • select():选择数据框中的列。
  • mutate():添加或修改列。
  • rename():重命名列。
  • relocate():重新排列列的顺序。
  • across() :对多列进行同样的操作,必须在data-masking verbs内使用。

示例代码:

r 复制代码
# select() 示例
df_selected <- df %>% select(name)

# mutate() 示例
df_mutated <- df %>% mutate(passed = score > 80)

# rename() 示例
df_renamed <- df %>% rename(student_name = name)

# relocate() 示例
df_relocated <- df %>% relocate(score, .before = name)

# across() 示例
df_across <- df %>% mutate(across(score, ~ . / 10))
3. 分组统计
  • group_by():对数据进行分组。
  • summarise():对分组后的数据进行汇总。
  • ungroup():取消分组。
  • count():对某列进行计数。
  • n():返回当前分组中的行数。
  • rowwise():逐行操作。

示例代码:

r 复制代码
# group_by() 和 summarise() 示例
df_grouped <- df %>% group_by(name) %>% summarise(avg_score = mean(score))

# ungroup() 示例
df_ungrouped <- df_grouped %>% ungroup()

# count() 示例
df_count <- df %>% count(name)

# rowwise() 示例
df_rowwise <- df %>% rowwise() %>% mutate(total_score = sum(score))
4. 其他常用函数
  • if_else():条件判断。
  • case_when():多条件判断。
  • cumsum():计算累计和。

示例代码:

r 复制代码
# if_else() 示例
df_if_else <- df %>% mutate(status = if_else(score > 80, "Pass", "Fail"))

# case_when() 示例
df_case_when <- df %>% mutate(
  grade = case_when(
    score >= 90 ~ "A",
    score >= 80 ~ "B",
    score >= 70 ~ "C",
    TRUE ~ "D"
  )
)

# cumsum() 示例
df_cumsum <- df %>% mutate(cumulative_score = cumsum(score))
二、多表部分

详见多表连接文章。

1. 内连接和外连接
  • inner_join():内连接。
  • left_join():左连接。
  • right_join():右连接。
  • full_join():全连接。

示例代码:

r 复制代码
# 创建另一个示例数据框
df2 <- data.frame(
  name = c("Alice", "Bob", "David"),
  age = c(23, 25, 30)
)

# inner_join() 示例
df_inner_join <- df %>% inner_join(df2, by = "name")

# left_join() 示例
df_left_join <- df %>% left_join(df2, by = "name")

# right_join() 示例
df_right_join <- df %>% right_join(df2, by = "name")

# full_join() 示例
df_full_join <- df %>% full_join(df2, by = "name")
2. 半连接和反连接
  • semi_join():半连接。
  • anti_join():反连接。

示例代码:

r 复制代码
# semi_join() 示例
df_semi_join <- df %>% semi_join(df2, by = "name")

# anti_join() 示例
df_anti_join <- df %>% anti_join(df2, by = "name")
3. 其他函数
  • intersect():求交集。
  • union():求并集。
  • setdiff():求差集。
  • bind_rows()bind_cols():合并数据框。

示例代码:

r 复制代码
# intersect() 示例 - 仅保留 'name' 列
df_common <- df["name"]
df2_common <- df2["name"]
df_intersect <- intersect(df_common, df2_common)


# union() 示例 - 仅保留 'name' 列
df_union <- union(df_common, df2_common)

# setdiff() 示例 - 仅保留 'name' 列
df_setdiff <- setdiff(df_common, df2_common)


# bind_rows() 示例 - 合并行
df_bind_rows <- bind_rows(df, df2)


# bind_cols() 示例 - 合并列(需要数据框行数相同)
# 为了演示,这里添加一些行以使 df2 行数与 df 相同
df2_expanded <- bind_rows(df2, data.frame(name = NA, age = NA))
bind_cols(df, df2_expanded)

通过上面的总结和示例代码,希望能帮助大家更好地理解和掌握dplyr包在R语言中的使用方法。dplyr提供了丰富的函数,能够极大地简化数据操作,提高工作效率。在实际工作中,我们应结合具体问题,灵活运用这些函数,解决数据处理中的各种需求。

相关推荐
淦暴尼13 小时前
基于spark的二手房数据分析可视化系统
大数据·分布式·数据分析·spark
Chef_Chen15 小时前
从0开始学习R语言--Day49--Lasso-Cox 回归
学习·回归·r语言
ClouGence21 小时前
CloudCanal + Apache Paimon + StarRocks 实时构建湖仓一体架构
后端·数据挖掘·数据分析
SickeyLee21 小时前
对比分析:给数据找个 “参照物”,让孤立数字变 “决策依据”
信息可视化·数据挖掘·数据分析
Rita的程序bug1 天前
R语言基础| 基本图形绘制(条形图、堆积图、分组图、填充条形图、均值条形图)
开发语言·信息可视化·r语言
蓝婷儿1 天前
Python 数据建模与分析项目实战预备 Day 4 - EDA(探索性数据分析)与可视化
开发语言·python·数据分析
王小王-1232 天前
基于Python的物联网岗位爬取与可视化系统的设计与实现【海量数据、全网岗位可换】
python·物联网·数据分析·计算机岗位分析·大数据岗位分析·物联网专业岗位数据分析
青春不败 177-3266-05203 天前
基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析实践技术应用
深度学习·机器学习·支持向量机·r语言·集成算法
阿里云大数据AI技术3 天前
跨国数仓迁移背后的统一存储格式创新-Append Delta Table
大数据·人工智能·数据分析
阿里云大数据AI技术4 天前
阿里云 EMR Serverless Spark: 面向 Data+AI 的高性能 Lakehouse 产品
大数据·人工智能·数据分析