在正式分析数据前,我们通常需要先预处理一下数据,比如筛选有效样本,定义变量格式,处理缺失值等,这些操作也就是是数据清洗的过程,目的是把数据整理成比较清洁的形式,便于后续处理。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

数据清洗的一般方法和步骤相关推荐

  1. CCS5.2 Graph的使用方法及步骤 FFT

    CCS5.2  Graph的使用方法及步骤 FFT      最近在做一个新项目,正好用到CCS,说实话从KEIL过渡到CCS真的有点不习惯,但CCS的某些功能还是非常实用的,在使用过程中,想对AD采 ...

  2. python绘制剖面图_干货!告诉你详细的剖面图绘图方法和步骤

    首先,我们总结一下制图7步: 01.分析图纸剖面图首先要进行分析,分析已知条件和图纸,方便进行体块的拆解,接下来才能开始进入绘制阶段. 02.定位绘制从定位开始,所有绘制出来的图样,都需要对它们进行定 ...

  3. win8如何卸载mysql5.0_Win8如何卸载Windows的服务?卸载Windows的服务的方法和步骤

    最新的微软Win8系统发布投入使用已经有一段时间了,一部分用户也升级到Win8系统了.整体体验还是比较好的,比起Wn7或者WinXP系统有了不少改进,但还是有一些用户用起来不是很习惯.那Win8如何卸 ...

  4. 完全卸载oracle11g教程、Oracle11g的卸载方法和步骤

    原文地址:完全卸载oracle11g教程.Oracle11g的卸载方法和步骤 Oracle 11g是甲骨文公司在2007年年7月12日推出的最新数据库软件,Oracle 11g有400多项功能,经过了 ...

  5. 免安装版的mysql步骤_mysql免安装版的安装方法及步骤

    mysql免安装版的安装方法及步骤 发布时间:2020-07-15 14:07:18 来源:亿速云 阅读:83 作者:清晨 小编给大家分享一下mysql免安装版的安装方法及步骤,希望大家阅读完这篇文章 ...

  6. 打开 mhtml 文件 显示不全_3dmax打开时显示缺少外部文件的解决方法与步骤

    谢谢观看文章,有什么问题可以私聊我,评论转发后可以私信我 资料 录播 可以免费领视频教学以及学习资料插件---------------------------------- 3dmax打开时显示缺少外 ...

  7. qt 判断路径非英文符号与非英文字符_Qt中,软件多语言国际化翻译的方法与步骤...

    总第23篇 在Qt的项目开发过程中,有时软件要翻译成多语言版本,这就涉及到国际化方面的操作.虽然Qt对这方面集成了很多工具,操作起来比较方便,本文还是总结一下国际化的方法和步骤,用以备忘和参考. 我们 ...

  8. 串口控制led闪烁课程设计_排除led显示屏故障的方法及步骤

    led显示屏是目前大屏领域炙手可热的产品,能应用在不同的领域和场所:但经了解调查,我们发现,led显示屏再使用过程中可能会面临系统发生故障,导致其无法正常工作,今天华邦瀛光电就带大家了解一些关于排除l ...

  9. python画spc控制图_SPC控制图的制作方法和步骤

    SPC 控制图的制作方法和步骤 一.控制图法的涵义 影响产品质量的因素很多,有静态因素也有动态因素,有没有一种方法能够即时监控产品的生产过程.及时 发现质量隐患, 以便改善生产过程, 减少废品和次品的 ...

最新文章

  1. 【Android 高性能音频】Oboe 开发流程 ( Oboe 音频帧简介 | AudioStreamCallback 中的数据帧说明 )
  2. 暑假旅游小高峰,旅游行业都在烧钱赚人气
  3. 技术分享 | 一条神奇的曲线——贝塞尔曲线在前端的应用
  4. [Java基础]内部类基础
  5. 301、404、200、304、500HTTP状态
  6. 数学和物理的共同演化
  7. R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)
  8. JavaAPI之Runtime类以及bat文件开启应用程序
  9. 11月22日学习内容整理:bootstrap居中处理和组件,常用组件
  10. js休眠5秒_JS 之秒开方案大全
  11. 功能强大且易用的云打印解决方案
  12. U盘硬盘等修复、维护、修理工具集合
  13. android youtube webview,在Android WebView中播放Youtube HTML5嵌入式视频
  14. 跟着架构师学习大型网站架构的技术细节:前端架构需要解决的问题
  15. 排序算法 之希尔排序及时间复杂度分析
  16. BT通信中数据下载的分析和实现
  17. Oracle 10g的安装
  18. 如何快速统计Excel中Sheet数
  19. matlab for 语句事例,有关matlab里面for语句的使用。
  20. 为什么大多公司不要培训班培训出来的JAVA程序员?求职必看

热门文章

  1. SQL SERVER插入数据操作
  2. 小案例:实现http://www.alloyteam.com/page/0/移动端效果,博客文章列表和文章详情页面
  3. 我和 JSRUN 网站的一些故事
  4. 一个快速的人脸检测库
  5. 软件项目经理需要了解的法律法规
  6. 前端代码规范——CSS代码规范
  7. mac系统下word和excel设置文件打开密码,输入密码才能打开文件
  8. idea debug图解
  9. Java线程池七个参数详解:核心线程数、最大线程数、空闲线程存活时间、时间单位、工作队列、线程工厂、拒绝策略
  10. 浅谈arm嵌入式产品及相关应用