数据清洗的一般方法和步骤

article/2025/9/16 21:52:16

在正式分析数据前,我们通常需要先预处理一下数据,比如筛选有效样本,定义变量格式,处理缺失值等,这些操作也就是是数据清洗的过程,目的是把数据整理成比较清洁的形式,便于后续处理。R的tidyverse系列工具包提供了一系列针对不同数据格式的丰富多样的处理方案,是数据清洗的神兵利器。在此之前,则需要先将数据导入到R的工作环境中。

1 数据导入

R支持多种数据格式,最常见的是csv和excel文件。

1.1 导入csv文件

read.table()read.csv()是R基础包utils中的函数(基础包会自动加载,相关函数可以直接调用),二者均可读取csv格式文件。

data <- read.table(file, header = FALSE, sep = "")data <- read.csv(file, header = TRUE, sep = ",")
  • 两个函数的主要参数均为前三个参数,其中第一个参数file为文件地址,第二个参数header表示是否以首行为标题,第三个参数sep表示分列符。两个函数后两个参数的默认值不同,read.table()默认不以首行为标题、不分列,read.csv默认以首行为标题、以逗号,分列。

csv本身是以逗号为分隔的文件,是否以首行为标题要根据实际情况。假设用fileaddress表示文件地址,那么两个函数导入csv数据的代码分别如下:

# 首行为标题
data <- read.table(fileaddress, header = TRUE, sep = ",")data <- read.csv(fileaddress)# 首行不为标题
data <- read.table(fileaddress, sep = ",")data <- read.csv(fileaddress, header = FALSE)

1.2 导入excel文件

R基础包中没有直接能读取excel文件的函数,需要借用其他功能包,常用的有readxlxlsx两个工具包,对应的函数分别是read_excel()read.xlsx()

library(readxl)data <- read_excel(path, sheet = NULL, col_names = TRUE)
  • 根据excel文件的具体格式可以选择使用read_xls()read_xlsx()函数,当批量化读取数据且两种格式并存时,可以使用通用函数read_excel()。path参数表示文件地址,sheet参数表示工作表序号,无默认值,col_names参数表示列名,默认为“是”。

xlsx包安装比较麻烦,需要先安装Java程序。首先进入Java官网[1],下载对应的Java脱机版本[2],需要注意的是Java的位数必须与使用的R的位数一致,比如均为64位或32位。Java安装文件夹默认为“C:\Program Files\Java\jre1.8.0_271”(最后的文件夹编号视版本而变化)不要改动。安装成功后再在R中运行以下代码:

install.packages("rJava")
install.packages("xlsxjars")
install.packages("xlsx")
Sys.setenv(JAVA_HOME="C:\\Program Files\\Java\\jre1.8.0_271")

Sys.setenv()用于设置系统环境变量,运行后需要重新启动R才能生效。重启后就可以正常加载xlsx了。read.xlsx()的主要参数如下:

data <- read.xlsx(file, sheetIndex, header = TRUE, encoding = "unknown")

2 数据筛选、转换等操作

在数据导入后,一般会首先进行删除无效样本、变量,利用原有变量生成新变量等操作,常用函数名称及其功能如下:

filter():按行筛选样本
select():按列选择变量
mutate:根据一个或多个变量生成新变量或重定义已有变量,原变量仍然保留
transmute():根据一个或多个变量生成新变量或重定义已有变量后,其他变量不再保留

library(tidyverse)data <- mtcars  # 假设导入的数据
summary(data)  # 查看data的变量和数据特征data %>%filter(cyl == 6) %>% # 样本筛选操作,只保留变量cyl为6的样本select(mpg, disp, hp) %>%  # 变量选择操作,只保留这三个变量select(-mpg) %>% # 变量反向选择操作,删去此变量,其他变量保留mutate(newvar = disp * hp) -> newdata  # 生成新变量操作newdata %>%transmute(newvar = disp * hp) ->  newdata2newdata
newdata2

3 数据框拼接、连接操作

数据框的合并是指将两个数据框整合成一个数据框,分为直接按行或列拼接和按共同变量连接两种,常用的函数名称及功能如下:

bind_cols:按行合并,即两个数据框相同行的拼接成同一行,要求它们行数相同,即 行 列和 行 列的两个数据框合并成 行 列的一个数据框
bind_rows:按列合并,要求两个数据框列数相同

  • R基础包中的cbind()rbind()函数也有类似功能,但运行速度较慢。

left_join():左连接,即以第一个数据框为参照
right_join():右连接,即以第二个数据框为参照

  • 这两个连接方案会保留参照数据框的所有行,而非参照数据框只保留能匹配到参照数据框的行,参照数据框不能匹配非参照数据框的行对应非参照数据框的变量记为NA;

  • 无论是左连接 还是右连接,合并后的数据框变量排序都是第一个数据框的原变量在前,第二个数据框的原变量在后;

  • 如果非参照数据框右多行与参照数据框的一行对应,那么合并后的数据框相比于参照数据框会多出若干行以一一连接这些行。

full_join():全连接,保留两个数据框所有的行,不能匹配的行对应变量记为NA
inner_join():内连接,只保留两个数据框能匹配的行
semi_join():半连接,保留第一个数据框能与第二个数据框匹配的内容,但不把第二个数据框的变量加入合并的数据框
anti_join():反向连接,保留第一个数据框不能与第二个数据框匹配的内容

library(tidyverse)# 准备两个数据框,ID为公共变量
df1 <- mtcars %>%slice(1 : 10) %>%select(mpg) %>%mutate(ID = c(1 : 10))df2 <- iris %>%slice(1 : 12) %>%select(Sepal.Length) %>%mutate(ID = floor(runif(12, min = 2, max = 11)))df1
df2# left_join
left_join(df1, df2, by = "ID")# 公共变量名称在两个数据框中不同
df11 <- rename(df1, ID1 = ID)
df22 <- rename(df2, ID2 = ID)
left_join(df11, df22, by = c("ID1" = "ID2"))# right_join
right_join(df1, df2, by = "ID")# full_join
full_join(df1, df2, by = "ID")# inner_join
inner_join(df1, df2, by = "ID")# semi_join
semi_join(df1, df2, by = "ID")# anti_join
anti_join(df1, df2, by = "ID")

4 命名、排序、分组等操作

rename:重命名变量
arrange():按变量进行行排序,优先级高的变量写在前面,默认升序,降序时使用desc(var)
group_by():按变量分组
ungroup():取消分组
summarise():汇总操作

summary(mtcars)
mtcars %>%select(mpg, disp, hp, cyl) %>%slice(1 : 10) %>%rename(mpg1 = mpg) %>%arrange(disp, desc(hp)) %>% # 按disp升序、hp降序排序relocate(hp, disp) %>% # 将变量hp移到disp前面group_by(cyl) %>%  # 按cyl分组mutate(mean = mean(disp)) %>%  # 按以上分组求disp的均值ungroup() -> data  # 取消分组
datadata  %>%group_by(cyl) %>%summarise(mean = mean(disp), n = n()) # 汇总

参考资料

[1]

Java官网: https://www.java.com/zh-CN/

[2]

Java脱机版本: https://www.java.com/zh-CN/download/manual.jsp

 

 


http://chatgpt.dhexx.cn/article/kq2LaHWU.shtml

相关文章

关于数据清洗的常见方式

1. 探索性分析 探索性分析部分&#xff0c;对于整个数据来讲是获得对数据一个初步的认识以及对先验知识的一个探索分析过程&#xff0c;在我做相关数据挖掘的过程中&#xff0c;主要是利用python相关的科学计算库进行数据初步的探索&#xff0c;例如数据类型&#xff0c;缺失值…

数据清洗的主要类型及步骤

一、数据清洗的定义 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序&#xff0c;包括检查数据一致性&#xff0c;处理无效值和缺失值等。数据清洗从名字上也看的出就是把“脏”的“洗掉”&#xff0c;指发现并纠正数据文件中可识别的错误的最后一道程序&#xf…

数据清洗的一些梳理

&#xff08;欢迎转载到个人朋友圈&#xff0c;转载时请带原文链接&#xff0c;公众号和其他媒体转载前请私信联系本人获取授权&#xff09; 首先对MayaG表示感谢&#xff0c;这篇文章是被你提的问题激发出的灵感&#xff0c;非常感谢~ 数据清洗&#xff0c; 是整个数据分析过程…

Linux awk命令详解

Linux awk命令详解 一、awk 工作原理 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理&#xff0c;而awk比较倾向于将一行分成多个“字段…

shell脚本——awk命令详解

每日分享&#xff1a; 也许你错过了今天的落日&#xff0c;但你可以去追逐下一个黎明&#xff01; 文章目录 一、awk1、工作原理2、格式3、常见的内建变量 二、awk命令使用——根据行输出内容输出所有内容输出指定行的内容输出奇数偶数行输出指定字符行的内容 三、awk命令使用—…

linux之awk详解

前言 awk不仅仅是Linux系统中的一个命令&#xff0c;而且其还是一种编程语言&#xff0c;可以用来处理数据和生成报告&#xff08;Excel&#xff09;。处理的数据可以是一个或多个文件&#xff0c;它是Linux系统最强大的文本处理工具&#xff0c;没有之一。 【语法格式】 aw…

Linux - awk命令详解

目录 1. awk命令 1.1 awk工作原理 1.2 awk语法 1.2.1 awk完整语法 示例&#xff1a; 1.2.1 awk工作流程 1.3 指定分隔符 1.3.1 -F 指定分隔符 1.3.2 指定输出分隔符 2. free命令 2.1 free命令各项含义 2.1.1 什么时候会使用交换分区&#xff1f; 2.1.2…

awk 命令详解

目录 一、awk概述 二、awk 工具原理 三、awk内置变量 四、awk用法示例 1、awk常用内置变量 2、BEGIN、END的用法 3、模糊匹配 4、数值与字符串的比较 5、逻辑运算&&和|| 6、其他内置变量的用法 7、awk高级用法 定义引用变量 awk通过管道符号、双引号调用she…

如何选择适合你的项目管理认证

前言 越来越多的小伙伴开始去考项目管理认证&#xff0c;目前互联网行业内主流的项目管理认证还是PMP的认证。 我想从几个方面来深度讲一讲项目管理认证的内容和价值&#xff0c;帮助大家做一个选择和辨别&#xff0c;避免在众多的项目管理认证中迷失了方向&#xff0c;一不小…

【敏捷方法落地之旅】-PMI_ACP敏捷认证交流会

会议名称&#xff1a;PMI_ACP敏捷认证交流会 会议时间&#xff1a;3月26日(星期六)14:00-16:30 会议举办具体地址&#xff1a;黄浦区成都北路500号峻岭广场16楼 票价&#xff1a;免费 参会规模(人数)&#xff1a;50 会议主办方&#xff1a;光环国际 一、会议简介 项目管…

CSM(Certified Scrum Master) 敏捷认证是什么?

Scrum 是用于开发和持续支持复杂产品的一个框架。Scrum 基于试验性过程控制理论&#xff0c;借鉴了精益思想、时间盒、模块化设计等&#xff0c;并完整地体现了敏捷宣言和敏捷原则。Scrum 采用一种迭代、增量式的方法来优化对未来的预测和管理风险&#xff0c;建立组织响应变化…

权威的国际敏捷认证Certified Scrum Master (CSM)

权威的国际敏捷认证Certified Scrum Master (CSM) A. 认证前 在学习Certified Scrum Master (CSM)之前,你需要了解: 什么是CSMCSM认证与其他敏捷认证有什么区别常见问题CSM培训课程大纲1. 什么是CSM 什么是Certified Scrum Master (CSM)2. Scrum国际敏捷认证 敏捷认证的对比…

PMI-ACP敏捷认证:敏捷开发的6个实战经验

敏捷开发,相对传统软件开发模式,它主要是针对快速变化的需求,不断优化管理流程,最终推出优质软件。 1. 快速迭代 相对那种半年一次的大版本发布来说,小版本的需求、开发和测试更加简单快速。一些公司,一年仅发布仅2~3 个版本,发布流程缓慢,它们仍采用瀑布开发模式,更严…

2021PMI-ACP®国际敏捷项目管理师认证招生简章

敏捷管理专业人士&#xff08;PMI-ACP&#xff09;认证要求敏捷培训、敏捷项目工作经验以及包含敏捷实践、工具、技巧考试的结合&#xff0c;结合了其他敏捷方法&#xff0c;包括SCRUM&#xff08;敏捷开发&#xff09;&#xff0c;XP&#xff08;极限编程&#xff09;和Lean D…

Scrum master敏捷认证全真试题截图PDF CSM敏捷认证考题真题题目试题2022年试题和答案下载

Scrum master敏捷认证全真试题截图PDF CSM敏捷认证考题真题题目试题2022年试题和答案下载 一、CSM敏捷认证简介 更多的介绍大家可以自行去百度搜索了解一下。 市面上的敏捷认证有两个&#xff1a; 一个是PMI的PMI-ACP认证&#xff1b; 一个是Scrum联盟的Certificated Scrum…

记一次CRM敏捷认证培训学习总结

前言 最近公司组织了一次关于CRM敏捷认证的培训和考试活动。为了加深记忆和留待以后回顾复习&#xff0c;也为了想要了解敏捷的同学提供一定的帮助&#xff0c;特此写了一篇关于敏捷培训的总结。 学习链接&#xff1a; Scrum指南2020版本下载地址&#xff1a;https://scrumgui…

敏捷认证_新敏捷–认证

敏捷认证 上次我们看情况如何。 事情如何在滑雪胜地的一群软件开发人员之间汇聚&#xff1a;在该领域进行了实际实验&#xff0c;并取得了成功。 有一个沟通渠道可以传播这些想法。 现在有了共同的愿景和名字。 除非肯施瓦伯 &#xff08; Ken Schwaber &#xff09;具有精明的…

C语言之#include用法详解

学习Linux C&#xff0c;必须要理解include&#xff0c;只要弄清以下几个问题&#xff0c;就能完全理解include了&#xff01; 1.#include 实质是什么&#xff1f; 预编译的时候copy include头文件的内容到当前行 &#xff08;疑问&#xff1a;预编译命令 $gcc -E test.c -o …

CMake中include的使用

CMake中的include命令用于从文件或模块(file or module)加载并运行CMake code。其格式如下&#xff1a; include(<file|module> [OPTIONAL] [RESULT_VARIABLE <var>][NO_POLICY_SCOPE]) 从给定的文件加载并运行CMake code。变量读写访问调用者的范围(Variable rea…