深入探究R语言中的 NA,NaN,NULL,Inf

将以下内容复制到Rmarkdown中编译!
# NA
## NA不是空值,而是一个逻辑值
```{r}
?"NA"
```
结果如下:
NA is a logical constant of length 1 which contains a missing value indicator. NA can be coerced to any other vector type except raw. There are also constants NA_integer_, NA_real_, NA_complex_ and NA_character_ of the other atomic vector types which support missing values: all of these are reserved words in the R language.
NA是长度为1的逻辑常数,它包含一个缺失的值指示符。NA可以被强制为除原始以外的任何其他向量类型。其他原子向量类型的常量NA_integer_、NA_real_、NA_complex_和NA_character_也支持缺失值:所有这些都是R语言中的保留字。
## NA既不是TRUE,也不是FALSE
```{r}
isTRUE(NA)
isFALSE(NA)
```
## NA是逻辑值,但不辨真假,而是介于真和假之间!
```{r}
c(TRUE, FALSE) & NA
c(TRUE, FALSE) | NA
```
TRUE & NA 的结果为 NA(而不是FALSE),是因为NA的意思是“不能确定真假”,即有可能真也有可能假,介于真和假之间。因此TRUE 与 NA的逻辑和(即TRUE & NA)返回NA;而FALSE 与 NA的逻辑和(即FALSE & NA) 则返回FALSE。逻辑或的情形也是类似的。
## NA有亲属NA_integer_、NA_real_、NA_complex_和NA_character_
## 判断NA的方法 is.na,!is.na
```{r}
is.na(c(1,NA,3,NA))
```
```{r}
!is.na(c(1,NA,3,NA))
```
## NA是NA,"NA"不是NA
```{r}
is.na(c("NA",NA))
```
## NA具有传染性
```{r}
sum(c(1,NA,3))
```
```{r}
mean(c(1,NA,3))
```
```{r}
sum(c(1,NA,3),na.rm = T)
mean(c(1,NA,3),na.rm = T)
```
## 什么情况下会得到NA
### 导入的Excel等数据中有空白单元格
### 观测值中有缺失值
### 转换数据是默认使用NA填充了缺失值
## 处理NA
### 简单粗暴删除 na.omit
```{r}
tibble(x=c(NA,1,3),y=c(2,NA,3)) %>% na.omit()
```
### 精细删除 drop_na
```{r}
df <- tibble(x=c(NA,1,3),y=c(2,NA,3))
drop_na(df,x)
```
### 固定值替换
```{r}
df <- tibble(x=c(NA,1,3),y=c(2,NA,3))
df[is.na(df)] <- 100
df
```
```{r}
replace_na(df$x,500)
```
```{r}
df <- tibble(x=c(NA,1,3),y=c(2,NA,3))
fill(df,x,.direction = "up")
```
### 均值填补法
这种方法主要用于连续资料的缺失,把缺失值用该变量的均值来填补。
```{r}
a1 <- c(1,NA,NA,NA,2)
a1[is.na(a1)] <- mean(a1,na.rm=T)
a1
```
### 中位数填补
### 众数填补
### 上一个观测值填补 zoo::na.locf
```{r}
zoo::na.locf(c(1,NA,NA,NA,2))
```
### 线性填补BOCF
### 最差值填补WOCF
### 虚拟变量法
当分类自变量出现NA时,把缺失值单独作为新的一类。
### 回归填补法
假定有X和Y两个变量,要填补Y的缺失值,我们可以把Y作为因变量,建立Y对X的回归方程,然后根据X的非缺失值,预测Y的缺失值。
### K-近邻算法填补
### 随机森林填补缺失值
### 多重插补法
### Hmisc包 示例
```{r}
library(Hmisc)
df <- tibble(x=c(NA,1,3,4),y=c(2,NA,3,4))
df$x <- impute(df$x,median)
```
### mice包 示例
```{r}
library(mice)
df <- tibble(x=c(NA,1,3,4),y=c(2,5,3,4))
df %>% mice() %>% complete()
```
# NaN
```{r}
0 / 0 %>% is.nan()
sqrt(-1) %>% is.nan()
as.complex(2i) %>% is.nan()
```
# NULL
空 什么都没有
```{r}
a <- c();a
is.na(a)
is.null(a)
```
```{r}
a & T
a | T
is.null(a & T)
is.na(a & T)
```
# Inf
无穷大
-Inf 负无穷
```{r}
is.numeric(Inf)
is.integer(Inf)
Inf+100
Inf+(-Inf)
```