Basics-R中NULL, NA, NaN的处理

贡献者马柑铃

问题

你想正确处理NULLNA (Not Available)、NaN(Not a Number)。

方案

你的数据有时将会存在NULLNANaN。处理这些数据有些不同于”正常”值,并可能需要确定性测试。

以下是这些值相比较的例子:

x <- NULL
x > 5
# logical(0)

y <- NA
y > 5
# NA

z <- NaN
z > 5
# NA

如何测试某个变量是否是其中的一个值:

is.null(x)
# TRUE

is.na(y)
# TRUE

is.nan(z)
# TRUE

注意,NULL不同于其他两个。NULL意味着没有值,而NANaN表示有价,尽管也许是不可用的。下面有一个例子区分:

# Is y null?
is.null(y)
# FALSE

# Is x NA?
is.na(x)
# logical(0)
# Warning message:
# In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'

第一个例子,检查y是否是NULL,结果y并不是;第二个例子,试图检查x是否是NA,但并没有值被检测。

忽视向量汇总函数中的“坏”值

如果你对包含NANaN的向量使用诸如mean()sum()之类的函数,结果将返回NANaN,这通常没有任何意义,虽然这样的结果会提醒你有“坏”值的存在。许多函数都有na.rm可以将这些值忽略。

vy <- c(1, 2, 3, NA, 5)
# 1  2  3 NA  5
mean(vy)
# NA
mean(vy, na.rm=TRUE)
# 2.75

vz <- c(1, 2, 3, NaN, 5)
# 1   2   3 NaN   5
sum(vz)
# NaN
sum(vz, na.rm=TRUE)
# 11

# NULL不是问题,因为它不存在
vx <- c(1, 2, 3, NULL, 5)
# 1 2 3 5
sum(vx)
# 11

从向量中移除”坏值“

使用is.na()is.nan()的反向函数,可以将这些值移除。

vy
# 1  2  3 NA  5
vy[!is.na(vy)]
# 1  2  3  5

vz
# 1   2   3 NaN   5
vz[!is.nan(vz)]
# 1  2  3  5

注意

也有无限值Inf-Inf,及其相应的函数is.finite()is.infinite()

/Manipulating data/Comparing vectors or factors with NA


原文链接:http://www.cookbook-r.com/Basics/Working_with_NULL_NA_and_NaN/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问题 你想正确处理NULL、NA (Not Available)、NaN(Not a Number)。 方案 你的...
    杏月阿六阅读 1,980评论 0 2
  • 在挖掘分析的过程当中对字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台...
    果果哥哥BBQ阅读 5,997评论 0 8
  • 姓名:梁涵瑜,年龄9岁 第1小组 自郑州亲子班结束,家长和孩子成为同学,共同制定清单,开始践行,规划自己的...
    梁正欣阅读 230评论 0 0
  • 有个人死了,他才刚刚意识到自己的生命如此短暂。这时,他看见佛祖手拎一个箱子向他走来。佛祖说:“好了,我们走吧。”男...
    心疼你的疼阅读 22,982评论 0 0
  • 阅读【西游殇】小说,请点:传送门 悟空 立于乾坤与天齐,一声大圣四海扬。 前路纵使妖魔海,齐天威势不...
    傅人阅读 2,093评论 68 55