欢迎光临散文网 会员登陆 & 注册

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

2023-08-18 12:52 作者:五柳冰冰  | 我要投稿

将以下内容复制到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)
```

深入探究R语言中的 NA,NaN,NULL,Inf的评论 (共 条)

分享到微博请遵守国家法律