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

相关推荐
Leo.yuan16 分钟前
数据量大Excel卡顿严重?选对报表工具提高10倍效率
数据库·数据分析·数据可视化·powerbi
海边散步的蜗牛5 小时前
学术论文写作丨机器学习与深度学习
人工智能·深度学习·机器学习·chatgpt·数据分析·ai写作
数模竞赛Paid answer7 小时前
2023年MathorCup数学建模A题量子计算机在信用评分卡组合优化中的应用解题全过程文档加程序
数学建模·数据分析·mathorcup
亚图跨际8 小时前
MATLAB和R及Python伪时间分析
python·matlab·r语言·伪时间分析
康谋自动驾驶9 小时前
康谋分享 | 确保AD/ADAS系统的安全:避免数据泛滥的关键
数据分析·自动驾驶·汽车
幸运小新15 小时前
数据分析-Excel基础操作
数据分析
Moonquake_www1 天前
数据集划分
算法·数据分析
想七想八不如114081 天前
【数据分析与数据挖掘】决策树算法
算法·数据挖掘·数据分析
Beekeeper&&P...1 天前
spring中r类是什么
spring·r语言