1 > ##########################R语言缺失值问题 2 > ###构造测试矩阵test 3 > test=data.frame(x1=c("",NA,1,2),x2=c("NA",1,4,"")) 4 > attach(test) 5 > test 6 x1 x2 7 1 NA 8 2 <NA> 1 9 3 1 4 10 4 2 11 > ###这里遇到一个问题,NA,"NA","" 三者之间的区别,以及R中 is.na(),na.omit()这两个函数起的作用 12 > na.omit(test) 13 x1 x2 14 1 NA 15 3 1 4 16 4 2 17 > is.na(x1) 18 [1] FALSE TRUE FALSE FALSE 19 > ###从上面两条命令可以看出:na.omit()和is.na()两个函数只识别 NA,即 <NA> 形式 20 > ###下面假设几种数据处理的情形 21 > ###筛选x1不为空的记录,这里的空表示 空字符串以及NA 22 > test[(x1!="")&(!is.na(x1)),] 23 x1 x2 24 3 1 4 25 4 2 26 > ###筛选x2不为空的记录,这里的空表示空字符串以及NA,注意X2中的为字符"NA" 27 > test[(x2!="")&(!is.na(x2)),] 28 x1 x2 29 1 NA 30 2 <NA> 1 31 3 1 4 32 > ###所以对于集合,如果要删除NA,"","NA" 这三种情形的记录,直接用三个条件进行处理,以免后患 33 > test[(!is.na(x1))&(x1!="")&(x1!="NA"),] 34 x1 x2 35 3 1 4 36 4 2 37 > ###总结:"NA"和""都属于字符串类型,不被is.na以及na.omit识别,字符串类型就用 操作符 != 来筛选,NA用is.na()来筛选