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()来筛选