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提供了丰富的函数,能够极大地简化数据操作,提高工作效率。在实际工作中,我们应结合具体问题,灵活运用这些函数,解决数据处理中的各种需求。

相关推荐
kylin王国4 小时前
R语言p值矫正整的方法
开发语言·r语言·p值
xiaoyalian11 小时前
R语言绘图过程中遇到图例的图块中出现字符“a“的解决方法
笔记·r语言·数据可视化
山海青风14 小时前
使用 OpenAI 进行数据探索性分析(EDA)
信息可视化·数据挖掘·数据分析
亚图跨际17 小时前
Python和R荧光分光光度法
开发语言·python·r语言·荧光分光光度法
AI完全体17 小时前
【AI日记】24.11.22 学习谷歌数据分析初级课程-第2/3课
学习·数据分析
databook21 小时前
『玩转Streamlit』--布局与容器组件
python·机器学习·数据分析
SelectDB技术团队1 天前
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
大数据·数据库·数据仓库·数据分析·doris
statistican_ABin1 天前
R语言数据分析案例45-全国汽车销售数据分析(可视化与回归分析)
数据挖掘·数据分析
网络真危险!!1 天前
【数据分析】认清、明确
数据挖掘·数据分析
菜鸟的人工智能之路1 天前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗