在数据挖掘过程中,我们接触到的数据并不总是完整的,要么缺失、不结构化,要么严重的就是数据错误,就像生活也并不总是完美的。因为大数据的黑箱操作,那么,当我们拿到一份或者自己获取整理数据的时候,就要考虑数据的完整性。否则,在错误的数据上花费了九牛二虎之力,自己还以为做的很正确。
下面谈谈我在用R数据挖掘过程中用到的去除缺失值的常用方法,这些都是我平时也会经常遇到会犯的错误:
1,比如a<-matrix(c(1,2,3,4,NA,6,7,8,9),nrow=3,ncol=3,byrow=TRUE)
complete.cases(a)
[1] TRUE FALSE TRUE
而a[complete.case(a),]则会返回去除缺失值所在行的新矩阵
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 7 8 9
也可以用
na.omit(a),得到
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 7 8 9
attr(,"na.action")
[1] 2
attr(,"class")
[1] "omit"
2,如果有另外一个向量b<-matrix(c(1,2,NA),nrow = 3,ncol = 1,byrow = TRUE)
b
[,1]
[1,] 1
[2,] 2
[3,] NA
complete.cases(a,b)
[1] TRUE FALSE FALSE 返回的是去除a,b的缺失值后的行,比如a是第二行缺失,b是第三行缺失,则a,b
只剩下一行;此时
a[complete.cases(a,b),] 得到
[1] 1 2 3
b[complete.cases(a,b),] 得到
[1] 1
3,用na.omit()则又是另外的结果了
na.omit(a,b)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 7 8 9
attr(,"na.action")
[1] 2
attr(,"class")
[1] "omit"
na.omit(b,a)
[,1]
[1,] 1
[2,] 2
attr(,"na.action")
[1] 3
attr(,"class")
[1] "omit"
显然na.omit()只是会对前面的进行去除缺失,na.omit(a,b)与na,omit(a)作用一样,同样na.omit(b,a)与na.omit(b),作用一样。
na.omit(b)
[,1]
[1,] 1
[2,] 2
attr(,"na.action")
[1] 3
attr(,"class")
[1] "omit"