在数据挖掘过程中,我们接触到的数据并不总是完整的,要么缺失、不结构化,要么严重的就是数据错误,就像生活也并不总是完美的。因为大数据的黑箱操作,那么,当我们拿到一份或者自己获取整理数据的时候,就要考虑数据的完整性。否则,在错误的数据上花费了九牛二虎之力,自己还以为做的很正确。

 

下面谈谈我在用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"