作者介绍:

杨光辉,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中也是这样,比如:

  1. > 2 / 0 ## 正无穷大

  2. [ 1 ] Inf

  3. > - 2 / 0 ## 负无穷大

  4. [ 1 ] - Inf

Inf 也可参与一些运算,比如:

  1. > 2 / Inf ## 当分子为有限值、分母无穷大时,结果为0

  2. [ 1 ] 0

  3. > exp(- Inf ) ## 自然数e的负无穷大次幂为0

  4. [ 1 ] 0

  5. > ( 0 : 3 )^ Inf ## 0的穷大次幂为0;1的穷大次幂还为1;大于1的数的无穷大次幂为无穷大

  6. [ 1 ] 0 1 Inf Inf

此外,在R中用 is.finite() , is.infinite() 来判断是否为无穷大数,比如:

  1. > is .finite( 2 )

  2. [ 1 ] TRUE

  3. > is .infinite( 2 / 0 )

  4. [ 1 ] TRUE

2. NaN

有些运算会导致结果为 非数值 ,在R中用 NaN 来表示,比如:

  1. > 0 / 0

  2. [ 1 ] NaN

  3. > Inf - Inf

  4. [ 1 ] NaN

  5. > Inf / Inf

  6. [ 1 ] NaN

在R中,用 is.nan() 来判断是否为非数值,比如:

  1. > is .nan( 2 )

  2. [ 1 ] FALSE

  3. > is .nan(NA) ## 缺失值NA不是非数值

  4. [ 1 ] FALSE

  5. > is .nan( 0 / 0 )

  6. [ 1 ] TRUE

3. NULL

NULL 表示 空值 ,表示没有内容。

一般常用在函数参数中,表示该参数没有被赋予任何值。也经常用在初始化变量,表示变量没有任何内容,因此它的长度为0。来看个例子:

  1. > x <- NULL

  2. [ 1 ] 0

  3. > length(x)

  4. [ 1 ] 0

  5. > is . null (x) ## is.null()函数判断是否为空值

  6. [ 1 ] TRUE

4. NA

NA 表示 缺失值 (Missing value),我们将会经常碰到这个值。

你可能想知道向量中是否有缺失值。对于这个问题,有人说用 == 关系运算符就行了,是这样吗?来看个例子:

  1. > x <- c( 2 , 5 , NA, 7 , NA, 8 )

  2. > x == NA

  3. [ 1 ] NA NA NA NA NA NA

  4. > is .na(x) ## 正确姿势

  5. [ 1 ] FALSE FALSE  TRUE FALSE  TRUE FALSE

显然用 == 不可行(为啥不行,仔细想想就明白),在R中可用 is.na() 函数来判断是否为缺失值

有时我们想 删除缺失值 或想 知道有多少个缺失值 ,可以通过下面代码来实现:

  1. > x[! is .na(x)] ## 删除缺失值

  2. [ 1 ] 2 5 8

  3. > sum( is .na(x)) ## 缺失值的个数

  4. [ 1 ] 2

对于处理含有缺失值的向量, 很多函数在默认参数下不能工作 ,比如:

  1. > x <- c( 2 , 5 , NA, 7 , NA, 8 )

  2. > mean(x)

  3. [ 1 ] NA

  4. > max(x)

  5. [ 1 ] NA

  6. > mean(x, na.rm=TRUE)

  7. [ 1 ] 5.5

  8. > max(x, na.rm=TRUE)

  9. [ 1 ] 8

可通过设置 na.rm TRUE 来删除缺失值,然后再统计

有时我们还想知道 缺失值 NA 在哪个位置 。此时可以通过 which() 函数来输出位置索引,比如:

  1. > x <- c( 2 , 5 , NA, 7 , NA, 8 )

  2. > which( is .na(x)) ## 第3和5个元素是缺失值

  3. [ 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 &gt... 一般在项目中,数据可能会因为设备故障、未作答问题或误编码数据的原因不完整。在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