数据获取后不能直接对数据进行分析,“脏数据”会直接影响最终的数据结论,需要对数据进行初步的处理,本文主要讲解数据获取后数据清洗内容,主要包括缺失值处理、特殊字符处理、大小写转换、数据格式转化、重复值处理、数值替换,下面一起来学习
。
示例工具:R x64 3.5.3、RStudio
本文讲解内容:数据清洗
适用范围:对于数据的初步清洗
案例演示需要创建一组数据表,生成数据表使用data.frame命令,与之前pandas生成数据表类似,生成的数据表如下,该数据包含空值、特殊字符、重复值等。
#手动创建数据表
data<-data.frame(ID=c("c001","c002","c003","c004","c005","c006","c007","c008","c009","c0010"),
NAME=c("Rmesh","Khilan","Kaushik","Chaitali","Hardik","Komal","Tom","Muffy","Susan","Kevin"),
AGE=c(23,20,23,25,27,24,26,31,26,30),
ADDRESS=c("Ahmed","Delhi","Kota","Mumbai","Bhopal","MP-A","MP-B","Indore","JP-No.1","JP-No.2"),
SAL=c(2000,1500,2000,NA,8500,NA,5500,9500,NA,900))
一、缺失值处理
缺失值处理可以直接删除空值或者对空值进行填充,缺失值填充有用0填充或者用均值填充等方法,删除数据表中的空值使用na.omit()函数,数据结果如下所示。
#删除包含空值的行
data_NA<-na.omit(data)
除此之外也可以使用数字对空值进行填充,下面的代码使用0对空值字段进行填充。
#将空值填充为0
data[is.na(data)] <- 0
除了使用0填充外,还可以使用均值填充,首先,在要填充的数值中使用mean()函数先计算SAL列当前的均值,然后,使用这个均值对NA进行填充,计算出SAL列的平均值如下:
mean(data_NA$SAL)
#将空值填充为均值
data[is.na(data)] <- mean(data_NA$SAL)
二、特殊字符处理
特殊字符处理如字符前无法察觉的空格,有时候也会产生不可避免的错误,需要数据清洗。
处理字符前的空格,首先需要安装raster和sp包,当界面出现sccessfully的字样时,表示已经安装成功,然后加载这两个包。
#安装raster和sp包
install.packages("raster")
install.packages("sp")
#加载raster和sp包
library('sp')
library('raster')
去除字符前空格需要使用trim函数,如果对于trim函数的参数释义不熟悉的话,可以调用帮助文档,在函数前加个问号即可调用。
#调用trim函数的帮助文档
?trim
加载完成后使用trim()函数完成对字符中空格的清洗。
#去SAL字段中的空格并替换原有字段
data_address=as.vector(data$ADDRESS)
df_A=trim(data_address)
data$SAL=df_A
三、大小写转换
R中使用tolower函数将大写转化为小写,将NAME列的所有字母大写转换为小写,得出结果如下。
#转化为小写字母
data$NAME=tolower(data$NAME)
四、数据格式转化
R中通过as.integer()函数或者as.character来修改数据格式,首先使用typeof函数查看数据类型,这里可以看到AGE这一列是数值类型。
#查看数据的格式
typeof(data$AGE)
as.integer()函数将数据格式转化为整型。
#更改数据格式
data$AGE=as.integer(data$AGE)
#查看修改后的数据格式
typeof(data$AGE)
as.character()函数将数据格式转化为字符型。
#更改数据格式
data$AGE=as.character(data$AGE)
#查看修改后的数据格式
typeof(data$AGE)
五、重复值处理
要查看重复值使用duplicated()函数,不仅可以查找数据表的重复值,而且也可以查找特定列中的重复值,返回值为TRUE表示有重复值 。
#查找数据表重复值
duplicated(data)
#查找特定列的重复值
duplicated(data$SAL)
使用unique()函数删除重复值。
#查看数据表的唯一值(删除重复值)
data_unique<-unique(data$SAL)
六、数值替换
要做数值替换,比如将NAME列的Tom替换为LIMING,可以使用gsub函数,替换的结果如下所示。
#字符替换
data$NAME<-gsub('Tom','LIMING',data$NAME)