在R语言中,Missing value的形式主要有:
NA
: not availableNaN
: 0/0Inf
: 无限大
> x <- c(44, NA, 5, NA)
> x * 3
[1] 132 NA 15 NA
> y <- rnorm(1000)
> z <- rep(NA, 1000)
> my_data <- sample(c(y, z), 100) # 随机采样100个元素
> my_data
[1] 0.76629651 0.39615616 -0.71761642 NA NA NA
[7] NA NA 0.60735445 NA NA 0.08338313
[13] 0.01974213 NA NA -1.82657697 NA -0.28294051
[19] 0.03196371 NA NA -1.18456252 NA -1.20050025
[25] NA NA -1.26944161 0.34304338 -1.61333718 NA
[31] 1.79210540 1.01263881 NA 0.46270297 -0.12714577 NA
[37] 0.32820326 NA -3.16195518 -0.39606753 1.16009695 -1.05330355
[43] NA NA NA 0.12118079 NA 0.04195091
[49] NA NA NA NA -0.30896718 NA
[55] NA 1.83117760 -0.81086702 NA -1.56413088 NA
[61] -1.11442068 NA NA 0.38576924 -0.33668322 -0.15655147
[67] NA NA NA 1.27678659 -2.33632458 NA
[73] -1.23821060 NA -0.91576671 -0.48974940 0.65014264 NA
[79] NA NA NA 0.19358796 -0.09460919 NA
[85] NA 1.11503910 NA 0.50268029 NA NA
[91] NA NA NA NA -0.07595303 -0.23761621
[97] NA -1.25733242 NA 0.54263107
> my_na <- is.na(my_data) # is.na 判断元素是否是NA,返回TRUE或FALSE
> my_na
[1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE FALSE
[14] TRUE TRUE FALSE TRUE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE TRUE
[27] FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE
[40] FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE
[53] FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE FALSE
[66] FALSE TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE
[79] TRUE TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE
[92] TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE
> my_data == NA
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[28] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[55] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[82] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
> sum(my_na)
[1] 53
> 0/0
[1] NaN
> 5/0
[1] Inf
> Inf - Inf
[1] NaN
R语言中,TRUE
就是1, FALSE
就是0。所以想要计算my_data
中有多少非NA
元素,首先通过is.na
来判断,返回一个logical vector,通过求和的方式即可得。
值得注意的是,通过my_data == NA
无法得到与is.na
一样的结果,因为NA
无法比较,是一个存储未知量的placeholder,有点类似python的None
。