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

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是一个公式,左边的每个变量都会成为新数据集中的一列,右边的变量是因子,其每个水平行在新数据集中成为一列,从而把长格式数据转换为短格式。

时间: 2024-10-15 07:25:23

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

R语言可视化学习笔记之添加p-value和显著性标记

R语言可视化学习笔记之添加p-value和显著性标记 http://www.jianshu.com/p/b7274afff14f?from=timeline 上篇文章中提了一下如何通过ggpubr包为ggplot图添加p-value以及显著性标记,本文将详细介绍.利用数据集ToothGrowth进行演示 #先加载包 library(ggpubr) #加载数据集ToothGrowth data("ToothGrowth") head(ToothGrowth) ## len supp do

Shell学习笔记——第三章

第三章 /etc/passwd 文件包含一个所有系统用户账户组成的列表,以及一些关于每个用户的基本信息. 例rich:x:501:Rich Blum:/home/rich:/bin/bash 每个条目都有7个数据字段,例使用冒号分隔.系统使用这些字段中的数据向用户分配具体的特性.这些字段分别有 用户名:用户密码(如果密码存储在其他文件中,则为占位符):用户的系统用户ID编号:用户的系统组的ID编号:用户的全名:用户默认的主目录:用户的默认Shell目录: cd 命令 略过 列表命令(ls) 参数

爬虫学习之第三章数据存储

第三章 数据存储 第一节 json文件处理: 什么是json: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据.简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率.更多解释请见:https://baike.baidu.com/item/JS

【数据分析 R语言实战】学习笔记 第四章 数据的图形描述

4.1 R绘图概述 以下两个函数,可以分别展示二维,三维图形的示例: >demo(graphics) >demo(persp) R提供了多种绘图相关的命令,可分成三类: 高级绘图命令:在图形设备上产生一个新的图区,它可能包括坐标轴.标签.标题等. 低级绘图命令:在一个己经存在的图形上加上更多的图形元素,如额外的点.线和标签. 交互式图形命令:允许交互式地用鼠标在一个已经存在的图形.上添加图形信息或者提取图形信息. 使用R语言作图,主要按照以下步骤进行: ①取原始数据,准备好绘图需要的变量. ②

【数据分析 R语言实战】学习笔记 第十一章 对应分析

11.2对应分析 在很多情况下,我们所关心的不仅仅是行或列变量本身,而是行变量和列变量的相互关系,这就是因子分析等方法无法解释的了.1970年法国统计学家J.P.Benzenci提出对应分析,也称关联分析.R-Q型因子分析,其是一种多元相依变量统计分析技术.它通过分析由定性变量构成的交互汇总表,来揭示同一变量各类别之间的差异,以及不同变量各类别之间的对应关系,这是一种非常好的分析调查问卷的手段. 对应分析是一种视觉化的数据分析方法,其基木思想是将一个联列表的行和列中各元素的比例结构以点的形式在较

【数据分析 R语言实战】学习笔记 第五章 数据的描述性分析(上)

5.1R内置的分布 分布是描述一个样本数据最核心.最重要的方式.R内嵌了很多常用的统计分布,提供了四类函数:概率密度函数(density),累积分布函数(probability).分位数(quantile)和伪随机数(random).在R中分别用d,p,q,r表示这4个项目,后面接分布的英文名称或缩写. 5.2集中趋势的分析 5.2.1集中趋势的测度 描述统计分布集中趋势的指标主要是平均数.中位数.众数,也称为“平均指标”.这些指标的主要作用包括: 反映总体各单位变量分布的集中趋势和一般水平;

从零开始系列-R语言基础学习笔记之二 数据结构(一)

在上一篇中我们一起学习了R语言的环境搭建,这次我们开始学习R语言的数据结构第一部分:向量.数组和矩阵. 一.向量 向量是一维数组,其内容可以是数值.字符或布尔值,但所有数据的类型必须一致.创建向量使用的关键字是c,访问向量中的元素使用[],具体如下: 创建数值向量a<-c(1,2,3,4,5,6) 创建字符向量b<-c("a","b","c") 创建布尔向量c<-c(TRUE,FALSE) 访问向量: a[3] 得到的值是3,注

R语言实战读书笔记(二)创建数据集

2.2.2 矩阵 matrix(vector,nrow,ncol,byrow,dimnames,char_vector_rownames,char_vector_colnames) 其中: byrow=TRUE/FALSE,表示按行填充还是按列填充,默认情况下是按列填充 2.2.4 数据框 1.attach,detach()和with() attach():将数据框加入搜索路径 detach():将数据框移除出搜索路径 with():赋值仅在括号内有效,如果想在括号外生效也可以,用<<- 2.

R语言实战读书笔记2—创建数据集(上)

第二章 创建数据集 2.1 数据集的概念 不同的行业对于数据集的行和列叫法不同.统计学家称它们为观测(observation)和变量(variable) ,数据库分析师则称其为记录(record)和字段(field) ,数据挖掘/机器学习学科的研究者则把它们叫做示例(example)和属性(attribute) .如表2.1所示 在表2-1所示的数据集中, PatientID 是行/实例标识符, AdmDate 是日期型变量, Age 是连续型变量, Diabetes 是名义型变量, Statu