本次记录一个数据检查工作,基于data.table及tidyverse等R包读取及检查数据,同时测试缺失值分析包naniar的功能。
本次拿到的数据集:
>raw<-fread('filename.csv', fill = T)
>str(raw)
Classes ‘data.table’ and 'data.frame': 8616000 obs. of 33 variables:
$ V2 : chr "5255071054237657617" "5255071054237657617" "5255071054237657617" "5255071054237657617" ...
$ V1 : chr "RUN_4" "RUN_5" "RUN_6" "RUN_7" ...
$ V3 : num 121 121 121 121 121 ...
...
800多万行数据,用data.table轻松读取。由于是未知数据,fill参数设置为T,默认是F。
本次目标有两个,1. 检查数据的NA值;2. 检查非NA值的数据分布。
首先用最基础的办法检查缺失值,先拿一列数据测试一下:
> test<-raw[,c('V1')] %>% is.na() %>% table() %>% data.table()
> test<-test[,field:='V1'] %>%
+ setnames(c('logic','cnt','field')) %>% setcolorder(c('field','logic','cnt')) %>%
+ dcast(field~logic, value.var = 'cnt')
> test
field FALSE
1: V1 8616000
Nice,没有空值。现在用apply遍历数据集中的每一列,将结果合并成一个表。此外,套一个system.time看看要多久。有条件的同学可以使用parApply来加速,但这会我们服务器在run其他项目,只能用单线程了: