在正式分析数据前,我们通常需要先预处理一下数据,比如筛选有效样本,定义变量格式,处理缺失值等,目的是把数据整理成比较清洁的形式,便于后续处理,而R的tidyverse系列工具包针对此提供了丰富多样的处理方案。本篇内容主要介绍常用的数据导入函数和dplyr包中的一些重要函数。

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官网,点击“所有Java下载”,下拉网页找到对应的Java脱机版本,需要注意的是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) ->  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)))# 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)
relocate():改变变量的列顺序;
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  # 取消分组data  %>%group_by(cyl) %>%summarise(mean = mean(disp), n = n()) # 汇总

dplyr | 数据导入和预处理的常用函数相关推荐

  1. 数据导入与预处理-第5章-数据清理

    数据导入与预处理-第5章-数据清理 1. 数据清理概述 1.1 数据清理概述 1.2 什么是缺失值 1.3 什么是重复值 1.4 什么是异常值 2. 数据清理案例 2.1 缺失值处理 2.1.1 缺失 ...

  2. 数据导入与预处理-第4章-数据获取python读取pdf文档

    数据导入与预处理-第4章-数据获取Python读取PDF文档 1 PDF简介 1.1 pdf是什么 2 Python操作PDF 2.1 pdfplumber库 2.2 pdfplumber基本操作 2 ...

  3. 数据导入与预处理-拓展-pandas时间数据处理01

    数据导入与预处理-拓展-pandas时间数据处理01 Pandas时序数据系列博客 Pandas时间序列数据处理 1.好用的Python库 2.Pandas历史 3.时序数据处理 3.1 时序中的基本 ...

  4. Pandas数据预处理的常用函数

    文章目录 前言 1.读取数据文件 1.1 读取excel数据文件 1.2 读取csv文件 1.3 读取数据时,跳过尾行 1.4 读取特定分割符的数据文件 1.5 使用c或者python作为读取文件的引 ...

  5. python数据分析学习day05:随机函数和常用函数

    1. 随机函数 NumPy中也有自己的随机函数,包含在random模块中.它能产生特定分布的随机数,如正态分布等.接下来介绍一些常用的随机数. numpy.random.rand 返回 0 到 1 之 ...

  6. oracle数据库函数mod,oracle数据库常用函数

    1.看当前数据库的名字 select name from v$database 2.查看当前数据库实例名 select instance_name from v$instance show param ...

  7. 大数据开发工具hive内部常用函数都有哪些?

    同学们在进行大数据的数据仓库分析时可能会用到hive这个工具,经常用来编写hql语句进行数据分析,今天小千就来给大家介绍十个经常会在开发过程中用到的函数和使用实例,记得收藏起来. 1.随机函数rand ...

  8. 数据导入与预处理——数据导入导出实验一

    目录 1.MySQL下载与安装 2.实验内容 附件: 2.1 任务一解答: 2.2 任务二解答: 销售部门输入: 物流部门输入: 客户关系部门输入: 文本文件输出: 仓库部门输入:​ 售后部门输入 : ...

  9. 数据导入与预处理实验二---json格式文件转换

    一.实验概述: [实验目的] 初步掌握数据采集的方法: 初步掌握利用爬虫爬取网络数据的方法 掌握不同数据格式之间的转换方法: [实施环境](使用的材料.设备.软件) Linux或Windows操作系统 ...

最新文章

  1. nginx 开发一个简单的 HTTP 模块
  2. java上机练习01
  3. scanf从文件中读入,printf写入到文件
  4. access开发内销核算系统
  5. qt带小数点的数字串显示,Qt-自定义小数点和千位分隔符
  6. jmeter java接口_JMeter接口Java开发五步曲
  7. 人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质
  8. 编写MR代码中,JAVA注意事项
  9. Linux之crontab命令
  10. Windows10部署Kubenetes详细步骤
  11. AcWing 796. 子矩阵的和
  12. 太强了!一个基于 Redis 的限流系统的设计!
  13. 截取一段字符串中,两个指定字符串中间的字符串
  14. centos 文件分割
  15. 618大促:手机品牌“神仙打架”,高端市场“谁主沉浮”?
  16. MAYA建模桌面一角_maya多边形建模实例-制作茶几步骤
  17. vue 用key拿对象value_基于vue--key值的特殊用处详解
  18. STM32F429 14. TIM_(一)_基本定时器
  19. war3 小头像图标位置
  20. JDBC使用报错: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not all

热门文章

  1. 检查vCenter Server上STS证书的过期日期(79248)(STS证书过期,导致 vCenter 报503无法登陆VC)
  2. VMware 大中华区原厂认证讲师(大陆地区)2019-8-19 更新
  3. ClickHouse到底有什么本事呢?互联网公司如此追捧
  4. Netty学习总结(1)——Netty入门介绍
  5. Mysql学习总结(16)——Mysql之数据库设计规范
  6. Shiro学习总结(2)——Apache Shiro快速入门教程
  7. redis怎么修改_面试官问我Redis事务,还问我有哪些实现方式
  8. 第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念...
  9. 开发者须知:哪些广告最让用户感到厌烦
  10. Android 蓝牙相关的广播