R语言数据处理——基于tidyverse (一)

本文介绍了使用R语言进行数据处理的基础知识,特别是tidyverse包的应用。讲解了如何通过slice和filter选取行子集,去除重复行,以及使用select函数及其配套函数选取列子集。同时,提到了管道操作符%>%、%T%、%$%和%<>%的功能和用法,帮助读者理解tidyverse在数据处理中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作

(1)安装tidyverse,用于数据处理

install.packages("tidyverse")

(2)运用R及相关包库及帮助文件进行学习

?filter   # 查看filter帮助文件          
?slice    # 查看slice帮助文件
??select  # 查看select帮助文件,注意,范围过大

2.基础知识

管道操作
数据集经常需要选行子集、选列子集、排序、定义新变量、横向合并、长宽转换等操作,而且经常会用若干个连续的操作分步处理。magrittr包的管道运算符 %>% 实现这样的操作流程。

比如,变量 x 先用函数 f(x)进行变换,再用函数 g(x) 进行变换,一般应该写成 g(f(x)),用%>% 运算符,可以表示成 x %>% f() %>% g()。

再比如 h(g(f(x))) 可以写成 x %>% f() %>% g() %>% h()。这样的表达更符合处理发生的次序,而且插入一个处理步骤也很容易。

(1) %T% 运算符,x %T% f() 返回 x 本身而不是用 f() 修改后的返回值 f(x),这在中间步骤需要显示或者绘图但是需要进一步对输入数据进行处理时有用。

(2)%$%运算符,此运算符的作用是将左运算元的各个变量(这时左运算元是数据框或列表)暴露出来,可以直接在右边调用其中的变量,类似于 with() 函数的作用。

(3)%<>% 运算符,用在管道链的第一个连接,可以将处理结果存入最开始的变量中。

1 选取行子集

1.1 slice :根据行特征选取行子集

Usage

library(tidyverse)                                       #先载入tidyverse

slice_head() and slice_tail()                            #select the first or last rows.
slice_sample()                                           #randomly selects rows.
slice_min() and slice_max()                              #select rows with highest or lowest values
<think>嗯,用户现在想了解R语言tidyverse包的使用方法和功能。我需要整理下回答的内容结构。用户提供了多个站内引用作为背景信息。引用1提到了tidyverse是HadleyWickham开发的,目的是解决baseR在数据处理上的效率问题,包含ggplot2、dplyr等功能包。引用2提到glimpse()函数和安装方法。引用3详细介绍了dplyr的分组操作group_by和summarise的使用方法。引用4则提到些日志处理函数的数据格式。这些引用可以帮助组织回答的内容。用户明确要求的是使用教程和功能介绍,所以需要从安装开始讲起,然后分模块讲解核心组件。根据引用1,tidyverse包含ggplot2、dplyr、tidyr、tibble等核心包,每个包的功能需要简单说明。引用3展示的dplyr分组统计示例很典型,可以包含在dplyr部分。另外管道操作符%>%也很重要,它能提高代码可读性,这个在示例中也出现了。考虑到用户可能是R语言初学者,回答应该结构清晰。安装部分引用2提到了安装命令,可以写出来。各包的功能介绍需要简明扼要,比如dplyr做数据操作,ggplot2负责可视化等。可以给出些简单代码示例,像引用3那样展示group_by和summarise的用法。准备引用文献时,引用1和3比较核心,可以分别标注[^1]和[^3]。相关问题的设计要围绕用户可能深入的方面,比如进阶学习资源、与其他工具的对比等。整个思考过程需要结合用户提供的引用信息,系统地整理tidyverse的核心功能和用法,最后自然地引导到相关问题。</think> 好的,非常乐意为您介绍 R 语言中强大的 `tidyverse` 包。`tidyverse` 是套由系列设计理念致、功能互补、无缝协作的 R 包组成的集合,它的核心理念是使数据导入、操作、转换、可视化和建模变得更加**清晰、致和高效**,特别是对于“整洁数据”(Tidy Data)——种每列是变量、每行是观测的标准数据结构。它极大地提升了数据分析工作流的流畅性和代码的可读性。 **核心功能包介绍 (使用教程要点):** 1. **`tibble`: 新代数据框** * **功能:** 是对传统 `data.frame` 的现代重构版本,解决了其些固有的痛点(如打印冗长、部分自动转换字符串为因子、部分子集操作行为不致等)。 * **特点与用法:** * **打印友好:** 默认只打印前 10 行和所有能适应屏幕的列,并显示每列的数据类型(`<dbl>`, `<chr>`, `<fct>`, `<date>` 等)。不会在控制台打印长串的整个数据集。 * **更严格的子集化:** `df[, j]` 返回列的子集(仍是 tibble,除非使用 `df[[j]]` 提取单个列的元素)。 * **不自动转换字符串为因子:** 更符合现代分析习惯。 * **构造方式:** `tibble(...)`, `as_tibble(data.frame)`,或者许多 `tidyverse` 函数默认返回 `tibble`。引用中提到的 `glimpse()` 函数(来自 `tibble` 或 `dplyr`)是快速查看数据结构和类型的绝佳工具,例如 `glimpse(iris)`。 2. **`dplyr`: 数据操作语法核心** * **功能:** 提供组强大、直观且致的**动词**(函数)来完成最常见的**数据操作任务**。 * **核心动词(必须掌握):** * `filter(.data, ...)`: 基于条件**筛选行**。例如 `filter(iris, Sepal.Length > 5)`。 * `select(.data, ...)`: 根据名称**选择列(变量)**。例如 `select(iris, Species, Petal.Length)`, `select(iris, -Sepal.Width)`。 * `mutate(.data, ...)`: **创建新列**或**修改现有列**。例如 `mutate(iris, Petal.Area = Petal.Length * Petal.Width)`。 * `arrange(.data, ...)`: 根据变量**排序行**(默认升序,用 `desc()` 降序)。例如 `arrange(iris, Sepal.Length)`, `arrange(iris, desc(Sepal.Length))`。 * `summarize(.data, ...)`: 执行数据的**汇总统计**(如 `mean()`, `sum()`, `sd()`, `n()` 等)。通常与 `group_by()` 组合使用。 * `group_by(.data, ...)`: 按个或多个变量**分组数据**。后续的 `summarize()` 或 `mutate()` 操作将在每个组内独立执行。其**对偶函数** `ungroup()` 用于取消分组[^3]。 * **分组统计示例:** ```r iris %>% group_by(Species) %>% summarize(Avg_Sepal_Length = mean(Sepal.Length)) # A tibble: 3 × 2 ``` * 结果:每个物种对应的花萼长度平均值。 * **`%>%`(管道操作符):** `dplyr` 和整个 `tidyverse` 的灵魂。它**将左侧对象的输出传递给右侧函数的第个参数**。使用 `x %>% f(y)` 等效于 `f(x, y)`。管道极大提升了代码的**可读性**和**可维护性**,让数据处理流程从左到右层层递进,避免嵌套函数。 3. **`tidyr`: 数据整形工具** * **功能:** 专门处理数据**结构转换**,解决数据的“整洁性”(Tidiness),在“宽格式”(Wide)和“长格式”(Long)之间转换。 * **核心函数:** * `pivot_longer(.data, ...)`: **将宽数据变长**(从列键值转到行键值)。将多列合并为列指标(键)和列数值(值)。 * `pivot_wider(.data, ...)`: **将长数据变宽**(从行键值转到列键值)。根据键的值创建新列。 * `separate(.data, col, into, ...)`: **将列拆分成多列**(基于分隔符)。 * `unite(.data, col, ..., sep)`: **将多列合并成列**(使用分隔符连接)。 4. **`ggplot2`: 优雅的图形语法** * **功能:** 基于图层的、声明式的可视化系统,用于创建**丰富多样、高度定制化的精美统计图形**。它的核心理念是将图形视为**数据 (`data`)** + **几何对象 (`geom_*`) / 图形属性 (`aes`)** + **统计变换 (`stat_*`) / 坐标系统 (`coord_*`) / 分面 (`facet_*`)** + **主题 (`theme_*`)** 的组合。 * **使用流程:** `ggplot(data, aes(x = var1, y = var2, color = var3)) + geom_point() + labs(title = "My Plot") + theme_bw()` * **优点:** 语法清晰致,从简单的散点图到复杂的热图、流线图等都能轻松构建,修改样式非常灵活。 **`tidyverse` 生态系统中的重要成员还包括:** * **`readr`:** 提供**快速、友好**的函数(如 `read_csv()`, `read_tsv()`, `read_delim()`)用于读取**文本格式数据**(如 CSV, TSV)。性能优于 `base R` 的 `read.csv()`,解析更智能,默认不自动转换字符串为因子。 * **`readxl`:** 读取 **Excel 文件**(`.xls`, `.xlsx`)。 * **`stringr`:** 提供套**致且易于记忆的函数**来处理**字符串**(如检测、提取、替换、连接、分割等)。引用中提到处理日志文件(例如查找特定模式如 IP 地址、日期)就很适合用 `stringr`[^4]。 * **`forcats`:** 用于**操作因子**(分类变量)的工具,轻松修改因子水平顺序、合并水平等。 * **`lubridate`:** 简化**日期时间数据**的解析、操作和计算。 * **`purrr`:** 提供了套增强 R 的**函数式编程**工具集,用于优雅且致地对**列表和向量**进行操作(迭代、映射、归约等)。 **为什么推崇 `tidyverse`? (vs Base R)** 1. **致性设计:** 所有包使用相同的数据结构(`tibble`)、相似的函数命名规则和参数约定(如 `.data` 参数、`...` 用法),学习个函数后,其知识可以迁移到其他相关函数上。 2. **管道(`%>%`):** 从根本上改变了编码风格,使复杂的数据处理**流程清晰可见**,代码像句子样从左到右**线性阅读**,大幅减少临时变量和嵌套函数的**复杂性与错误率**。 3. **高效简洁:** 用更少的代码行完成更多的工作。`dplyr` 的动词和 `tidyr` 的函数将许多 `base R` 中需要多行或复杂下标操作才能完成的任务变得非常简单。 4. **默认行为更优:** `tibble` 打印更清晰,`readr` 读取更快更安全,默认不转因子,`stringr` 函数名统易记。 5. **强大的可扩展性:** 核心包能无缝配合,庞大的扩展生态(开发者社区贡献的 `tidyverse` 友好包)围绕 `tidyverse` 理念构建。 6. **更现代的语法:** 代表了 R 语言数据科学发展的重要方向。 **如何开始使用 `tidyverse`?** 1. **安装:** (如果还没有安装)引用 [^2] 提供了命令: ```r install.packages("tidyverse") # 安装整个 tidyverse 集合 ``` 2. **加载:** (在每次 R 会话需要使用时) ```r library(tidyverse) ``` 这会加载核心包(`tibble`, `dplyr`, `tidyr`, `readr`, `purrr`, `ggplot2`, `stringr`, `forcats`)。你也可以单独加载需要的包,如 `library(dplyr)`。 **总结:** `tidyverse` 是 R 进行**现代数据科学**不可或缺的工具集。它以 `tibble` 作为数据容器,以 `dplyr` 和 `tidyr` 为核心操作语言,以 `ggplot2` 为可视化引擎,以 `%>%` 管道串联整个数据处理分析流程,辅以系列用于数据导入(`readr`, `readxl`)和特定数据类型处理(`stringr`, `forcats`, `lubridate`)的工具包。它极大地提升了数据处理的效率、代码的可读性和分析结果的可复现性,使得 R 在数据处理领域更具吸引力和生产力。掌握 `tidyverse`,是掌握 R 现代数据分析的关键步[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值