近期在清洗“十二五传染病重大专项”的数据,看似简单的东西却反反复复折腾了许久,“脏数据”里面需要注意的细节真的很多。本期与大家一起分享一些R清洗数据的小窍门,也算是对既往工作的一个小小总结,以备后用。
1.首先,数据中可能会有身份证号、电话号码等长串数值变量,读入进R会变成科学计数法的形式,这时我们可以先将其变为字符型as.character( ),再在前面加上一个字母再保存paste0( )。
2.接着,我们想看看身份证号的位数正确与否nchar( ),假设身份证是15位,找出来那些不正确的which( )。用which很重要,尤其是当数据中有缺失时,不用which会将缺失的和满足条件的全找出来。
3.接着,我们想看看数据集中的身份证号是否有重复duplicated( ),是否有缺失is.na( )。
4.接着,假设数据集里面没有性别这个变量,而我们想知道,这时可以从身份证号提取substr( )。身份证号的倒数第二位是偶数代表女性,奇数代表男性,%%代表取余数,能整除者为代表女性,余数为1代表男性。同理,我们也可以将出生年月日提取出来,从而算出年龄。
5.接着,有的人身份证号最后一位是X,而可能数据录入时有的大写有的小写,此时要将其统一为大写toupper( ),或者统一为小写tolower( )。
6.接着,数据集中的年龄在录入时有的加了“岁”,有的没加,为分析方便,统一只提取数字parse_number( ),并且想按照年龄大小重新排序order( )。
7.接着,想要按照唯一识别列身份证号,将两个数据集的信息合并
merge( )。
8.接着,你可能想要把出生日期改为日期格式
as.Date( ),或者提取年月日。
9.R产生的一些特殊符号的释义。
NA:缺失数据
NaN:无意义的数,比如sqrt(-2)
Inf:正无穷大
-Inf:负无穷大
10.特定格式搜索与替换sub( )。
11.如果想要对某列变量,如身高,向上ceiling( )或者向下floor( )取整数。
最常用到就是这些了,清洗过的数据库不算多,遗漏之处或者朋友们觉得很重要的小函数请不吝留言施教于我!
关注本号,每周三给你好看!
领取专属 10元无门槛券
私享最新 技术干货