Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【数据分析 R语言实战】学习笔记 第三章 数据预处理 (下)

【数据分析 R语言实战】学习笔记 第三章 数据预处理 (下)

作者头像
Ai学习的老章
发布于 2019-04-10 08:52:17
发布于 2019-04-10 08:52:17
2.1K0
举报

3.3缺失值处理

R中缺失值以NA表示,判断数据是否存在缺失值的函数有两个,最基本的函数是is.na()它可以应用于向量、数据框等多种对象,返回逻辑值。

> attach(data)

The following objects are masked fromdata (pos = 3):

city, price, salary

> data$salary=replace(salary,salary>5,NA)

> is.na(salary)

[1] FALSEFALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSEFALSE

> sum(is.na(salary))

[1] 4

另一个判断缺失值的函数是complete.cases(),它同样返回逻辑值向量,但值与is.na()的相反:缺失值为FALSE,正常数据为TRUE,利用它来选取无缺失数据的行非常方便。

> complete.cases(data$salary)

[1] TRUE TRUE FALSE TRUE FALSE FALSEFALSE TRUE TRUE TRUE TRUE TRUE

3.3.2判断缺失模式

存在缺失数据时,需要进一步判断数据的缺失模式,判断是否是随机的,然后才能确定处理的方法。

程序包mice,利用链式方程进行多元插补,可以处理混合变量类型的数据缺失,自动产生填补变量的预测变量,是处理缺失值的重要工具。

> library(mice)

> data$price=replace(price,price>5,NA)

> md.pattern(data)

price salary city

5 1 1 0 1

3 0 1 0 2

4 1 0 0 2

3 4 12 19

输出结果中的“1”表示没有缺失数据,“0”表示存在缺失数据。第1列第1行的“5”表示有5个样本是完整的,下面的“3”表示有3个样本缺少了salary这一变量的值,第1列最后一个数字“4”表示有4条记录在salary和price上都有缺失。最后一行表示各个变量缺失的样本数合计。

程序包VIM提供了在R中探索数据缺失情况的新工具,实现缺失模式的可视化

> library(VIM)

> aggr(data)

第一个图由小条形的长度显示各变量缺失数据比例

第二个图显示了综合的缺失模式,可以与md.pattern()生成的结果对照观察,其中浅色方框表示完整数据,深色框表示缺失值。底部的颜色框高度反映了相应组合的频率。

3.3.3处理缺失数据

(1)删除缺失样本

过滤掉缺失样本是最简单的方式,其前提是缺失数据的比例较少,而且缺失数据是随机出现的,这样删除缺失数据后对分析结果影响不大。 R可以使用complete.cases()指令选取完整的记录,有缺失值的行则删去不要。

> data1=data[complete.cases(data$salary),]

> dim(data1)

[1] 8 3

> data2=data[!is.na(salary),]

> dim(data2)

[1] 8 3

对于有多个变量缺失的数据,如果想直接删除所有的缺失值,可以通过na.omit()函数来完成,

> data3=na.omit(data)

> dim(data3)

[1] 5 3

(2)替换缺失值

> data[is.na(data)]=mean(salary[!is.na(salary)])

(3)多重插补法

多重插补(Multiple Imputation)是用于填补复杂数据缺失值的一种方法,该方法通过变量间关系来预测缺失数据,利用蒙特卡罗随机模拟方法生成多个完整数据集,再对这些数据集分别进行分析,最后对这些分析结果进行汇总处理。FSC是基于链式方程的插补方法,因此也称为MICE (Multiple Imputation by Chained Equations )。它与其他多重插补算法的本质区别是,它在进行插补时不必考虑被插补变量和协变量的联合分布,而是利用单个变量的条件分布逐一进行插补。在R语言中通过程序包mice中的函数mice()可以实现该方法,它随机模拟多个完整数据集并存入imp,再对imp进行线性回归,最后用pool函数对回归结果进行汇总。

3.4数据整理

3.4.1数据合并

(1)函数cbind(),rbind()

> a=c("hk",12,10)

> data1=rbind(data,a)

> data1

cityprice salary

………

12 qa 6 5

13 hk 12 10

(2)构造data.frame

对数据“整容”最简单的思路是把数据向量化,再按要求用向量构建其他类型的对象。一些结构相似的对象,如向量(数值型、字符型、逻辑型)、因子、数值矩阵、列表或其他数据框等,可以被合并为一个数据框。

> weight=c(150,135,210,140)

> height=c(65,61,70,65)

> gender=c("F","F","M","F")

> stu=data.frame(weight,height,gender)

> stu

weightheight gender

1 150 65 F

2 135 61 F

3 210 70 M

4 140 65 F

合并时,变量名称就白动变成了新数据框的列名,也可以用names()重新给其赋值。

> row.names(stu)=c("Alice","Bob","Cal","David")

> stu

weightheight gender

Alice 150 65 F

Bob 135 61 F

Cal 210 70 M

David 140 65 F

(3)函数merge()

在R中合并两个数据集可以通过专门的函数merge()来实现。merge通过相同的列或行名来识别,合并两个数据框或列表,其调用格式如下:

merge(x, y, by = intersect(names(x),names(y)),by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,sort =TRUE, suffixes = c(".x",".y"),

incomparables = NULL, ...)

x,y 要合并的数据集

by指定合并的依据(相同的行或列)

by.x by.y分别为第一个数据框和第二个数据框要连接的列名

all, all.x, all.y逻辑值,默认为FALSE。

> index=list("city"=data$city,"index"=1:12)

> index

$city

[1]"bj" "sh" "gz" "ab" "cd""as" "ac" "fa" "ff" "ee""er" "qa"

$index

[1] 1 2 3 4 5 6 7 8 9 10 11 12

> data.index=merge(data,index,by="city")

> data.index

cityprice salary index

1 ab 6 5 4

2 ac 5 NA 7

3 as 3 NA 6

4 bj 1 2 1

5 cd 1 NA 5

6 ee 3 4 10

7 er 5 3 11

8 fa 6 1 8

9 ff 1 2 9

10 gz 5 NA 3

11 qa 6 5 12

12 sh 3 4 2

3.4.2选取数据的子集

在R中,选取数据子集用中括号[]

> data[data$salary>6]

3.4.3数据排序

R中的排序函数sort()只能对向量进行简单的排序,对含有多变量的数据集,需要用order指令来完成,其调用格式如下:

order(..., na.last = TRUE, decreasing =FALSE)

> order.price=order(data$price)

> sort.list(data$price)

指令order返回向量排序后各数字的原始位置,与之非常相关的指令是秩(rank ),它返回每个数字在整个向量中的秩,可以简单地理解为各个数字的大小顺序。

> rank(data$price)

3.5长宽格式的转换.

>t (data)

3.5.1揉数据函数

R中有两个揉数据函数stack()和unstack|(),用于数据长格式和宽格式之间的转换.

stack()把一个数据框转换成两列:一列为数据,另一列为数据对应的列名称。

unstack()是stack的逆过程,被转换的对象包含两列,它把数据列按照因子列的不同水平重新排列,分离为不同的列。

3.5.2揉数据的最佳伴侣

程序包reshape2是reshape的重写版,是专门用于数据集形状转换的,一般用户常使用melt(), acast()和dcast(),它们却可以把数据“揉成各种形状。

melt本身的意思是溶解、分解,其作用在一个数据集上其实就是拆分数据,它的对象一可以是数组(array )、数据框或列表。

> library(reshape2)

> data(airquality)

> str(airquality)

'data.frame': 153obs. of 6 variables:

$Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...

$ Solar.R:int 190 118 149 313 NA NA 299 99 19 194...

$Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6...

$Temp : int 67 72 74 62 56 66 65 59 61 69 ...

$Month : int 5 5 5 5 5 5 5 5 5 5 ...

$ Day : int 1 2 3 4 5 6 7 8 9 10 ...

> longdata=melt(airquality,id.vars=c("Ozone",'Month',"Month","Day"),measure.vars=2:4)

> str(longdata)

'data.frame': 459obs. of 6 variables:

$Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...

$Month : int 5 5 5 5 5 5 5 5 5 5 ...

$Month : int 5 5 5 5 5 5 5 5 5 5 ...

$ Day : int 1 2 3 4 5 6 7 8 9 10 ...

$variable: Factor w/ 3 levels "Solar.R","Wind",..: 1 1 1 1 11 1 1 1 1 ...

$value : num 190 118 149 313 NA NA 299 99 19 194 ...

利用ggplot2在一个图形中多维度地展示value值

> library(ggplot2)

> p=ggplot(data=longdata,aes(x=Ozone,y=value,color=factor (Month)))

> p+geom_point(shape=20,size=4)+facet_wrap(~variable,scales="free_y")+geom_smooth(aes(group=1),fill="gray80")

和stack()一样,melt()也有对应的函数用来还原数据:acast()用于数组,dcast()用于数据框,其中的参数formula是一个公式,左边的每个变量都会成为新数据集中的一列,右边的变量是因子,其每个水平行在新数据集中成为一列,从而把长格式数据转换为短格式。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【数据分析 R语言实战】学习笔记 第三章 数据预处理 (上)
数据是分析的核心,在做数据分析之前,首先要对数据进行一定的处理。数据预处理指当录入或读取数据后,对数据进行必要的清理,包括查错纠错、异常观察值和无效样本的处理、转换、填补缺失值等,这是数据分析的重要前提,是描述统计、定性定量分析的基础。它的主要口的就是为后续的分析工作提供经过清理、质量较好的数据集。
Ai学习的老章
2019/04/10
8320
【数据分析 R语言实战】学习笔记 第三章 数据预处理 (上)
R语言第二章数据处理⑨缺失值判断和填充
=========================================
用户1359560
2019/03/04
2.8K0
R语言数据分析与挖掘(第一章):数据预处理(1)——缺失值处理
今天开始新的R教程:R语言数据分析与挖掘,本教程是在掌握R基础语法和基本绘图的情况下学习,没有R基础的可先在网上找相关教程进行学习。当然,本公众号(bioinfo_cloud)也有基础的语法教程,也可参考学习!后台回复:R语言基础教程,即可获取,或者通过本公众号的菜单栏自己寻找!
DoubleHelix
2019/09/25
4.5K0
R语言数据分析与挖掘(第一章):数据预处理(1)——缺失值处理
R语言数据分析与挖掘(第一章):数据预处理(2)——缺失值常用的处理方法
上一篇文章(缺失值处理)介绍了缺失值处理的判断方法,这一讲接着介绍缺失值常用的几种处理方法:删除法,替换法和插补法。不同的方法对应不同类型的缺失值。
DoubleHelix
2019/09/25
2.7K0
R语言数据分析与挖掘(第一章):数据预处理(2)——缺失值常用的处理方法
R语言之缺失值处理
在实际的数据分析中,缺失数据是常常遇到的。缺失值(missing values)通常是由于没有收集到数据或者没有录入数据。
timerring
2023/10/13
7700
R语言之缺失值处理
超详细的 R 语言插补缺失值教程来啦~
在分析数据集时,常常会碰到一些缺失值,如果缺失值的数量相对总体来说非常小,那么直接删除缺失值就是一种可行的方法。但某些情况下,直接删除缺失值可能会损失一些有用信息,此时就需要寻找方法来补全缺失值。今天小编给大家介绍一个用来处理缺失值的 R 包——MICE,本文为译文,原文链接[1]及参考文章[2]见文末。
庄闪闪
2021/12/02
16.6K2
超详细的 R 语言插补缺失值教程来啦~
R 数据质量分析①
数据质量分析是数据挖掘中数据准备的最重要一环,是数据处理的前体。数据质量分分析主要任务是识别脏数据。常见的脏数据包括:
用户1359560
2018/08/27
1.1K0
R  数据质量分析①
R语言:用R语言填补缺失的数据
如果缺失数据的量相对于数据集的大小非常小,那么为了不偏离分析而忽略缺少特征的少数样本可能是最好的策略,但是留下可用的数据点会剥夺某些数据的特征。
拓端
2020/08/17
1.1K0
R语言:用R语言填补缺失的数据
R in action读书笔记(20)第十五章 处理缺失数据的高级方法
(1) 完全随机缺失:若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据为完全随机缺失(MCAR)
Ai学习的老章
2019/04/10
7200
R in action读书笔记(20)第十五章  处理缺失数据的高级方法
R语言处理缺失数据的高级方法
主要用到VIM和mice包 [plain] view plain install.packages(c("VIM","mice")) 1.处理缺失值的步骤 步骤: (1)识别缺失数据; (2)检查导致数据缺失的原因; (3)删除包含缺失值的实例或用合理的数值代替(插补)缺失值 缺失值数据的分类: (1)完全随机缺失:若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据为完全随机缺失(MCAR)。 (2)随机缺失:若某变量上的缺失数据与其他观测变量相关,与它自己的未观测值不相关,则数据为随机缺失(
机器学习AI算法工程
2018/03/13
2.8K0
R语言处理缺失数据的高级方法
R语言实战(18)—处理缺失数据的高级方法
引言:上一章我们学习了一系列用于二分类的机器学习方法,包括逻辑回归分类方法、传统决策树、条件推断树、集成性的随机森林以及支持向量机。这一期我们就来学习如何处理缺失数据吧。
王诗翔呀
2020/07/06
3K0
R语言实战(18)—处理缺失数据的高级方法
R语言︱异常值检验、离群点分析、异常值处理
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/51210793
悟乙己
2019/05/27
5.5K0
缺失值处理(r语言,mice包)
对缺失值的处理是数据预处理中的重要环节,造成数据缺失的原因有:数据丢失、存储故障和调查中拒绝透露相关信息。这里我们使用VIM包中的sleep数据集为样本,介绍缺失值处理的方法。sleep数据集纪录了62个哺乳动物的睡眠信息,包括体重,睡眠时长,做梦时长等。 缺失值分类 1,完全随机缺失(MCAR):缺失数据与其他变量无关。如果每个缺失变量都为MCAR,则完整样本可看为更大数据集的简单抽样。 2,随机缺失(CAR):缺失数据与其他观测变量相关,与本身变量不相关。比如体重小的动物Dream数据更容易缺失(较小动
三猫
2018/04/10
3.9K0
缺失值处理(r语言,mice包)
R用户要整点python--pandas进阶
1.缺失值2.处理缺失值练习:处理缺失值3.Apply4.tidy数据重置索引练习5.groupby练习:groupby
用户11414625
2024/12/20
1110
R用户要整点python--pandas进阶
102-R数据整理12-缺失值的高级处理:用mice进行多重填补
比如multivariate imputation by chained equations (MICE) 方法:
北野茶缸子
2022/04/05
8K1
102-R数据整理12-缺失值的高级处理:用mice进行多重填补
左手用R右手Python系列8——数据去重与缺失值处理
因为最近事情略多,最近更新的不勤了,但是学习的脚步不能停,一旦停下来,有些路就白走了,今天就盘点一下R语言和Python中常用于处理重复值、缺失值的函数。 在R语言中,涉及到数据去重与缺失值处理的函数一共有下面这么几个: unique distinct intersect union duplicated #布尔判断 is.na()/!is.na() #缺/非缺失值 na.rm=TRUE/FALSE #移除缺失值 na.omit(lc) #忽略缺失值 complete.
数据小磨坊
2018/04/11
2K0
左手用R右手Python系列8——数据去重与缺失值处理
R语言naniar包(新名词:阴影矩阵;Shadow matrices)
因为ggplot2不能处理缺失值,所以我们得到了一个warning message ,我们可以使用geom_miss_point() 去展示缺失数据。
用户1359560
2020/02/11
1.7K0
R语言naniar包(新名词:阴影矩阵;Shadow matrices)
R语言从入门到精通:Day5
在正文内容开始之前,我先给大家推荐一个文档https://google.github.io/styleguide/Rguide.xml
用户6317549
2019/09/24
1.7K0
R语言从入门到精通:Day5
R海拾遗_naniar
通常情况下,我们使用summary函数或者is.na对缺失值进行查看,但是当数据量增大的时候,就显得有点费力了,在visdat包中,有两个函数vis_dat和vis_miss用于可视化缺失查看
火星娃统计
2021/01/12
9820
R海拾遗_naniar
R语言_基本数据管理
#创建新变量并保存到原有数据框 #way 1 d = data.frame(x1=1:4,x2=2:5) d$sum = d$x1+d$x2 #way 2 d= transform(d,sum=x1+x2,meanx=(x1+x2)/2) #变量的重编码 d = within(d,{ x1Less2 = NA x1Less2[x1<=2] = "y" x1Less2[x1>2] = "n" }) #变量的重命名 fix(d) names(d)[c(3,4)] = c("sum
用户1147754
2019/05/27
6140
推荐阅读
相关推荐
【数据分析 R语言实战】学习笔记 第三章 数据预处理 (上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档