作者介绍:
杨光辉,R语言中文社区专栏作者,中科院近代物理研究所,科研工作者一枚。目前的研究方向是知识图谱。知乎专栏:R语言初级教程,个人公众号:
R语言和Python学堂。
这几个都是R语言里面的
特殊值
,都是R的
保留字
(reserved words)。它们的意义分别为:
-
NA
:表示
缺失值
(Missing value),是“Not Available”的缩写
-
Inf
:表示
无穷大
,是“Infinite”的缩写
-
NaN
:表示
非数值
,是“Not a Number”的缩写
-
NULL
:表示
空值
,即没有内容
下面通过一些例子来了解它们的用法。由于有关
NA
的内容较多,最后再介绍它。
1. Inf
我们知道,对于分数,当分母为
0
分子不为
0
时,结果为
无穷大
。当分子为正数时,结果为
正无穷大
;当分子为负数时,结果为
负无穷大
。在R中也是这样,比如:
-
>
2
/
0
## 正无穷大
-
[
1
]
Inf
-
> -
2
/
0
## 负无穷大
-
[
1
] -
Inf
Inf
也可参与一些运算,比如:
-
>
2
/
Inf
## 当分子为有限值、分母无穷大时,结果为0
-
[
1
]
0
-
> exp(-
Inf
)
## 自然数e的负无穷大次幂为0
-
[
1
]
0
-
> (
0
:
3
)^
Inf
## 0的穷大次幂为0;1的穷大次幂还为1;大于1的数的无穷大次幂为无穷大
-
[
1
]
0
1
Inf
Inf
此外,在R中用
is.finite()
,
is.infinite()
来判断是否为无穷大数,比如:
-
>
is
.finite(
2
)
-
[
1
] TRUE
-
>
is
.infinite(
2
/
0
)
-
[
1
] TRUE
2. NaN
有些运算会导致结果为
非数值
,在R中用
NaN
来表示,比如:
-
>
0
/
0
-
[
1
]
NaN
-
>
Inf
-
Inf
-
[
1
]
NaN
-
>
Inf
/
Inf
-
[
1
]
NaN
在R中,用
is.nan()
来判断是否为非数值,比如:
-
>
is
.nan(
2
)
-
[
1
] FALSE
-
>
is
.nan(NA)
## 缺失值NA不是非数值
-
[
1
] FALSE
-
>
is
.nan(
0
/
0
)
-
[
1
] TRUE
3. NULL
NULL
表示
空值
,表示没有内容。
一般常用在函数参数中,表示该参数没有被赋予任何值。也经常用在初始化变量,表示变量没有任何内容,因此它的长度为0。来看个例子:
-
> x <- NULL
-
[
1
]
0
-
> length(x)
-
[
1
]
0
-
>
is
.
null
(x)
## is.null()函数判断是否为空值
-
[
1
] TRUE
4. NA
NA
表示
缺失值
(Missing value),我们将会经常碰到这个值。
你可能想知道向量中是否有缺失值。对于这个问题,有人说用
==
关系运算符就行了,是这样吗?来看个例子:
-
> x <- c(
2
,
5
, NA,
7
, NA,
8
)
-
> x == NA
-
[
1
] NA NA NA NA NA NA
-
>
is
.na(x)
## 正确姿势
-
[
1
] FALSE FALSE TRUE FALSE TRUE FALSE
显然用
==
不可行(为啥不行,仔细想想就明白),在R中可用
is.na()
函数来判断是否为缺失值
有时我们想
删除缺失值
或想
知道有多少个缺失值
,可以通过下面代码来实现:
-
> x[!
is
.na(x)]
## 删除缺失值
-
[
1
]
2
5
8
-
> sum(
is
.na(x))
## 缺失值的个数
-
[
1
]
2
对于处理含有缺失值的向量,
很多函数在默认参数下不能工作
,比如:
-
> x <- c(
2
,
5
, NA,
7
, NA,
8
)
-
> mean(x)
-
[
1
] NA
-
> max(x)
-
[
1
] NA
-
> mean(x, na.rm=TRUE)
-
[
1
]
5.5
-
> max(x, na.rm=TRUE)
-
[
1
]
8
可通过设置
na.rm
为
TRUE
来删除缺失值,然后再统计
有时我们还想知道
缺失值
NA
在哪个位置
。此时可以通过
which()
函数来输出位置索引,比如:
-
> x <- c(
2
,
5
, NA,
7
, NA,
8
)
-
> which(
is
.na(x))
## 第3和5个元素是缺失值
-
[
1
]
3
5
有关R语言里面的特殊值就讲到这。
如若有遗漏,后期将会添加至作者博客,欢迎关注~~
R语言
处理缺失
值
在处理数据过程中,避免不了会产生一些缺失
值
,如未填写数据或者编码错误等原因,用
NA
表示缺失
值
。在
R语言
中,is.
na
()函数可以判断元素是否是缺失
值
,从而返回逻辑
值
(TRUE/FALSE),所以该函数将会返回和元数据集一样大小的数据集。在判断缺失
值
的过程中,需要注意以下两点:
一是缺失
值
是不可以比较的,即不可以用缺失
值
去寻找缺失
值
,如var ==
NA
返回的结果永远不会是true。
二是
R语言
中不会将正无穷和负无穷写成
NA
,分别用
Inf
和 –
Inf
所标记。
既然缺失
值
可能无处不在,那么在数据分析过程中可以采取如下的方法去除缺失
值
:
一是很多数
值
函数都拥有一个
na
.rm
主要是通过
R语言
,对日期数据进行处理,并补全缺失数据
rawdata<- read.csv("C:/Users/li/Desktop/ss.csv",fill=F)
#提取数据 ss1,并组合数据-------------------------------
ts1<-rawdata$ts1
ts11<-as.Date(ts1,'%Y/%m/%d')
false<-is.
na
(ts11)
ts21<-ts11[!false]
ss1<-rawdata$SS1
ss1<-ss1[!false]
library(zoo)
data1<-zoo(ss1,ts21)
#补全不规则数据(时间的缺失和缺失
值
)
date1<-zoo(,seq(start(data1),end(data1),'day'))
datanew1<-merge(data1,date1)
datanew1[is.
na
(datanew1)]<-median(datanew1,
na
.rm = T)
#提取数据 ss2
目录00引言1、
Inf
2、
NAN
(Not a Number)3、
NA
与逻辑运算符4、总结
这篇的主角是
R语言
中缺失
值
(
NA
)的识别与提取。先介绍
NAN
、
Inf
及其运算。在最终介绍缺失
值
(
NA
),毕竟重要的都压轴嘛。
1、
Inf
在实数轴上除了确定的有限点,还有两个无限:正无穷、负无穷。用
Inf
、-
Inf
表示。
[1]
Inf
> -
Inf
[1] -
Inf
>...
一般在项目中,数据可能会因为设备故障、未作答问题或误编码数据的原因不完整。在R中
NA
(not available,不可用)表示缺失
值
。
函数is.
na
()允许你检测缺失
值
是否存在。该函数作用于检测对象之后将返回一个相同大小的对象,其中缺失
值
的位置被改写为true,其他不是缺失
值
的位置则为false。
> which(is.
na
(nhanes2)) #返回缺失
值
的位置
> sum(is.
na
c() 函数是 R 语言中的合并函数,用于将多个
值
合并成一个向量。加上
NA
参数表示在合并的
值
的末尾添加一个
NA
值
。
NA
表示缺失
值
,即这个位置的数据缺失或者无效。因此,c(a, b,
NA
) 的意思是将 a 和 b 合并成一个向量,并在末尾添加一个
NA
值
。