数据清洗——是时候把自己从繁重的体力劳动中解救出来了

今日内容

一、数据结构

二、数据清洗

2.1 缺失值处理

2.2变量调整

2.3日期值处理

2.4数据框管理

在进行数据处理之前,我们首先需要了解数据的组合结构

关于数据结构

【1】简单理解:把独立的数据,整合存储到一起的形式(如下图)

【2】数据结构从简单到复杂的顺序如下:

向量<矩阵

向量:一行数据,每个数据的数据类型相同

矩阵:多个向量组成的二维数组(n行*m列),要求数据类型相同

数组:维度大于2的数组(x组*n行*m列)

数据框:多个向量组成的二维数组(n行*m列),每列数据类型可不同

列表:以上各种数据类型任意组合的数据结构

【3】常用的数据结构

最常用的数据结构是数据框,因为数据框相对更加灵活(各列的变量类型可以不同)而且数据框的结果相对简单(只有行*列)。在Excel和MySQL数据表格里面导入的都是数据框结构的数据

数据结构看似复杂,其实只是数据的组合形式的不断变化而已,初学者可以重点理解数据框,其他部分暂不细讲,想深入了解的同学可在后台回复“教材”下载《R语言实战中文版》自行学习第二章内容。

案例讲解:创建一个数据框

*本文使用的源数据来自R语言实战第四节数据leadership

案例描述:

现有一份领导力评分的问卷,问卷数据包含了被试的编号,填写日期,国籍,性别,年龄等基本信息和关于领导力的5个问题(q1-q5)的得分情况。现在需要设计一个数据框并将以上数据存储进该数据框。

操作指导:

【先将每组信息(性别,年龄,得分等)放入独立的向量中,函数为c(数值,数值,...)】→【将向量整合到一个数据框,整合函数为data.frame(向量1,向量2,......,)】

脚本如下,点击看大图

数据框创建完成后,我们发现这个数据还不具备分析的条件,需要进行数据清洗

存在各种缺失值(NA和99)

对年龄进行分段

日期格式有问题(此时的日期是字符串数据,如果要进行运算需要转换为日期数据)

1

常见的缺失值处理问题

把明显错误的值设置为缺失值(99替换为NA)

删除缺失值所在的这条观测数据

为缺失值赋值(比如缺失值为平均水平)

案例讲解:缺失值处理

案例描述:

如果数据量较大且缺失值较少时,可以把有缺失值的问卷做无效问卷,删除整条数据,有时可以在不影响最终分析结果的前提下替换部分缺失值,例如本例中q5和q4列用平均得分替换缺失值。其中年龄为99是一个明显不可能的值,也需要替换成缺失值。

操作指导:

***对数据进行清洗后的结果可以用原数据框进行命名,即替换原数据框,也可以新命名,这样清洗前的数据也会保留,建议采用新命名。

删除缺失值函数:na,omit(数据框名称)*数据框名称不加引号

替换变量数值

需要替换的变量【替换条件】

*数据框$变量名是变量的精确定义,考虑到存在几个数据框中有重复变量名的情况

判断是否缺失值:is.na(变量名)

计算均值:mean(需要计算的变量,na.rm=TRUE)*na.rm=TRUE表示忽略缺失值

脚本如下,点击看大图

结果如下

2

变量的调整

添加新变量

修改变量类型

变量的重编码

案例讲解:变量调整

案例描述:

在数据框添加一个新变量qmean表示每个被试的平均领导力得分。再添加一个年龄段变量agecat,根据每个被试的age数值分为青年(30岁以下),中年(30-40)和老年(40以上),并且将agecat变量转换为有序因子型(顺序为老中青),对数据框按照年龄,性别对数据进行排序。

操作指导:

重编码函数

within(数据框名称,{

创建的新变量

创建的新变量[赋值条件]

创建的新变量[赋值条件2]

创建的新变量[赋值条件3]

}

设置有序因子函数:factor(变量名,order=TRUE,levels=c(第一位,第二位,第三位......))

查看变量是否为因子型:is.factor(变量名)

***因子是指类别型变量,例如虽然名称和性别都是字符串,但是性别就属于因子,因子和数值格式的变量都是可以排序的,被称为有序因子,顺序可以设置(例如本例中的老中青)

排序:数据框[order(第一排序,第二排序)]*排序变量前加-表示降序

脚本如下,点击看大图

最终结果

3

日期的处理

字符型到日期型的转换

日期的数值运算

下图为日期格式的写法示例,摘自《R语言实战》第四章4.6节

案例讲解:日期值处理

案例描述:

数据框中的日期实际是字符串格式,需要转化为“yyyy-mm-dd”的日期格式,并且计算据今天的时间差。

操作指导:

将字符型数据设置成日期as.Date(变量,%m%d%y)

取今天的日期Sys.Data()

计算日期差(可直接相减获得天数)difftime(近日期,远日期,units="单位"

脚本如下,点击看大图

结果如下

4

数据框管理

合并列

合并行

取子集

案例讲解:数据框管理

案例描述:

在原有数据框的基础上补充企业规模的数据(来自表leadership_scale),并且删掉部分不需要的变量;

将新补充数据(leadership_2nd)续到原数据框下面;

根据筛选条件条件在数据框中选出部分数据组成新的数据框。

操作指导:

合并列函数:merge(数据框1,数据框2,by="关联变量"*关联变量是指两个数据框共有的且每行唯一的变量,例如本例中的经理人编号

合并行函数:rbind(数据框1,数据框2)

筛选取子集函数:subset(数据框,筛选条件,select=c(选入观测的变量)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G0YOGG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券