R语言的“dplyr”数据操作.docxVIP

  • 0
  • 0
  • 约6.57千字
  • 约 13页
  • 2026-01-20 发布于上海
  • 举报

R语言的“dplyr”数据操作

一、dplyr的基础认知:数据操作的“底层逻辑”

(一)dplyr的简介与生态定位

在R语言的数据分析生态中,dplyr是一颗“明星包”——它隶属于tidyverse生态系统(由HadleyWickham及其团队开发的一系列数据科学工具包集合),专注于高效、简洁的数据操作。与baseR(R的基础包)相比,dplyr的优势在于:语法更直观、逻辑更一致、速度更快,尤其适合处理结构化数据(如表格数据)。

要使用dplyr,首先需要安装(仅需一次):在R控制台输入install.packages(tidyverse)(tidyverse包含dplyr及其他常用包,如ggplot2可视化、tidyr数据整理),或单独安装dplyr(install.packages(dplyr))。安装完成后,用library(tidyverse)或library(dplyr)加载包——加载tidyverse会自动引入dplyr,因此无需重复操作。

(二)dplyr的核心哲学:整洁数据与动词优先

dplyr的设计遵循两大核心思想,这也是它区别于其他数据操作工具的关键:

整洁数据(TidyData):这是tidyverse的底层逻辑,要求数据满足三个条件——每个变量占一列(如“年龄”是一个变量,单独成列)、每个观测占一行(如“张三的年龄”是一个观测,对应一行)、每个值占一个单元格(如“张三的年龄25”是一个值,对应一个单元格)。现实中的原始数据常不满足这一点(比如将“数学”“语文”作为列名的成绩表),需先用tidyr包整理成整洁格式(如用pivot_longer将科目列转换为行),再用dplyr操作。

动词优先(Verb-First):dplyr将所有数据操作转化为明确的“动词”,每个动词只做一件事,且语法高度一致。比如“选择变量”用select、“筛选行”用filter、“新增变量”用mutate——这些动词像日常对话中的“动作”,直接描述你对数据的操作意图。这种设计大幅降低了记忆成本:你不需要记复杂的函数名,只需想“我要做什么”,就能找到对应的动词。

二、dplyr的核心动词:数据操作的“基本动作”

dplyr的核心功能围绕六个基础动词展开,它们覆盖了90%以上的日常数据操作需求。

(一)选择变量:select——留下需要的“列”

select的作用是从数据框中选择或排除变量,语法为select(数据框,变量条件)。它支持多种灵活的选择方式:

直接选变量:select(df,姓名,年龄)(从df中选“姓名”“年龄”列);

用辅助函数选变量:starts_with(前缀)(选前缀匹配的变量,如starts_with(身)选“身高”“体重”)、ends_with(后缀)(选后缀匹配的变量,如ends_with(龄)选“年龄”“工龄”)、contains(关键词)(选包含关键词的变量,如contains(成绩)选“数学成绩”“语文成绩”);

排除变量:用减号-开头,如select(df,-年龄)(排除“年龄”列)、select(df,-starts_with(身))(排除所有前缀为“身”的变量)。

举个例子:若数据框students包含“姓名”“年龄”“性别”“身高_cm”“体重_kg”“数学成绩”,要选“姓名”“数学成绩”及所有含“身”的变量,可写select(students,姓名,数学成绩,starts_with(身))。

(二)筛选行:filter——留下需要的“观测”

filter的作用是按逻辑条件筛选行,语法为filter(数据框,逻辑条件)。逻辑条件支持(且)、|(或)、!(非)组合,也可使用%in%(属于某集合)、between()(在区间内)等辅助函数:

基本条件:filter(students,年龄18)(选年龄18的行)、filter(students,性别==女数学成绩=90)(选女生且数学≥90的行);

集合条件:filter(students,班级%in%c(一班,二班))(选一班或二班的学生);

区间条件:filter(students,between(年龄,16,20))(选年龄在16-20岁之间的学生)。

需注意,filter会自动排除含NA(缺失值)的行,若要保留NA,需用is.na()函数(如filter(students,is.na(年龄))选年龄为NA的行)。

(三)排序:arrange——让数据“有秩序”

arrange的作用是按变量排序,语法为arrange(数据框,变量1,变量2),默认升序排列。若要降序,在变量前加desc()函数:

arrange(students,年龄)(按年龄升序);

arrange(stu

文档评论(0)

1亿VIP精品文档

相关文档