深入探究R語(yǔ)言中的 NA,NaN,NULL,Inf

將以下內(nèi)容復(fù)制到Rmarkdown中編譯!
# NA
## NA不是空值,而是一個(gè)邏輯值
```{r}
?"NA"
```
結(jié)果如下:
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是長(zhǎng)度為1的邏輯常數(shù),它包含一個(gè)缺失的值指示符。NA可以被強(qiáng)制為除原始以外的任何其他向量類型。其他原子向量類型的常量NA_integer_、NA_real_、NA_complex_和NA_character_也支持缺失值:所有這些都是R語(yǔ)言中的保留字。
## NA既不是TRUE,也不是FALSE
```{r}
isTRUE(NA)
isFALSE(NA)
```
## NA是邏輯值,但不辨真假,而是介于真和假之間!
```{r}
c(TRUE, FALSE) & NA
c(TRUE, FALSE) | NA
```
TRUE & NA 的結(jié)果為 NA(而不是FALSE),是因?yàn)镹A的意思是“不能確定真假”,即有可能真也有可能假,介于真和假之間。因此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)
```
## 什么情況下會(huì)得到NA
### 導(dǎo)入的Excel等數(shù)據(jù)中有空白單元格
### 觀測(cè)值中有缺失值
### 轉(zhuǎn)換數(shù)據(jù)是默認(rèn)使用NA填充了缺失值
## 處理NA
### 簡(jiǎn)單粗暴刪除 na.omit
```{r}
tibble(x=c(NA,1,3),y=c(2,NA,3)) %>% na.omit()
```
### 精細(xì)刪除 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")
```
### 均值填補(bǔ)法
這種方法主要用于連續(xù)資料的缺失,把缺失值用該變量的均值來填補(bǔ)。
```{r}
a1 <- c(1,NA,NA,NA,2)
a1[is.na(a1)] <- mean(a1,na.rm=T)
a1
```
### 中位數(shù)填補(bǔ)
### 眾數(shù)填補(bǔ)
### 上一個(gè)觀測(cè)值填補(bǔ) zoo::na.locf
```{r}
zoo::na.locf(c(1,NA,NA,NA,2))
```
### 線性填補(bǔ)BOCF
### 最差值填補(bǔ)WOCF
### 虛擬變量法
當(dāng)分類自變量出現(xiàn)NA時(shí),把缺失值單獨(dú)作為新的一類。
### 回歸填補(bǔ)法
假定有X和Y兩個(gè)變量,要填補(bǔ)Y的缺失值,我們可以把Y作為因變量,建立Y對(duì)X的回歸方程,然后根據(jù)X的非缺失值,預(yù)測(cè)Y的缺失值。
### K-近鄰算法填補(bǔ)
### 隨機(jī)森林填補(bǔ)缺失值
### 多重插補(bǔ)法
### 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
無(wú)窮大
-Inf? 負(fù)無(wú)窮
```{r}
is.numeric(Inf)
is.integer(Inf)
Inf+100
Inf+(-Inf)
```