“ 在拿到一组数据的时候,我们经常会对特定的值进行筛选,或者想看看数据中是不是有NA值以及排查数据是不是都大于或者小于某值。”
过去的文章里,我们从向量的创建和增删改查开始讲解,一直到取向量的长度以及使用各种方法创建我们需要的向量。其中最重要的莫过于上文讲的创建重复向量和等差数列了。
而我们真正做数据处理的时候大多数都是先读取数据,然后才会进行处理,而读取了数据以后,我们需要重点考虑以下的问题。我们的数据的某列是不是都大于一个定值?数据某列是不是有小于某个值的观测,如果没有那我也不需要进行下一步处理了。。。此外,本文还将简单介绍关于NA和NULL的概念。接下来,就开始今天的内容吧!
NA和NULL
NA值和NULL值都是我们常常听说的概念,我们经常称呼它们一个为缺失值,一个为空值,但是具体何为缺失值,何为空值呢?在分析过程中,它们对我们的结果有什么影响呢?
NA值,其实是一个缩写,它的全名叫做Not Available,也就是缺失的值,使用一个简单的例子给大家生成一个NA值,
> a <- 1:3
> a[1:5]
[1] 1 2 3 NA NA
我们使用上面的方法就能产生NA了,我们向量长度只有3但是我们的索引值给到了4和5,R解释器想了想,我没有这两个索引位置的值啊,也就是这两个位置的值是缺失的,所以给你返回了缺失值NA.
我们平时读取数据的时候要万分小心数据中是不是有缺失值,不然会对运算造成巨大的影响,下面给出案例
> b <- a[1:5]
> mean(b)
[1] NA
> mean(a)
[1] 2
我们可以发现,如果我们的数据有NA值,那么运算函数就会直接返回NA,没法计算,因为它是个缺失的值。
至于怎么处理,也很简单,指定na.rm参数即可,
> mean(b,na.rm = T)
[1] 2
上面就是关于NA的简单介绍,后面还会专门讲解NA的处理,关于如何填充NA值,如何移除NA值等等,后面的小节2将讲解如何看向量中有没有NA值。
下面介绍NULL,NULL,就是空值,什么都没有,就是空。下面给个例子看看NULL和NA的区别
> a <- NULL
> length(a)
[1] 0
> b <- NA
> length(b)
[1] 1
我们可以看到,如果你给向量复制NULL和NA,你就会发现,NULL长度是0,也就是什么都没有,而NA的长度是一,表明虽然你缺失了,但是至少这里还有个东西。
另外一点不同的是,NULL不会对你的运算产生影响
> a <- c(1,2,3,NULL)
> mean(a)
[1] 2
> length(a)
[1] 3
包含NULL的向量是可以运算的,而且重要的是NULL本身不占位,计算均值的时候长度为3,不是4。
而NULL有什么用呢,它空无一物,也不占位,也代表不了这里也许曾经有个值(NA)。如果大家写过c或者cpp,大家可能就知道,使用一个变量之前先声明一下,R是没有这种规则的。但是当你想使用循环捕获值的时候,你必须进行初始化操作,这个时候NULL就会起作用了。(后面循环的时候有讲解)
Any函数
上文说过,读取了一组数据,我们经常关心某一列是不是有特定的值范围,我们这个时候可以使用筛选的操作进行处理,然后拿到结果,不过这就太麻烦了,浪费时间和内存。
R给我们提供了一个内置函数 - Any函数,它可以让我们了解到向量里的任一个值是不是满足一个条件,听着是不是很拗口呢,下面给几个例子就好了
> d <- 1:20
> any(d > 1)
[1] TRUE
> any(d < 100)
[1] TRUE
> any(d < 5)
[1] TRUE
> any(d == 10)
[1] TRUE
> any(d < 0)
[1] FALSE
这就是我们的any函数,它可以让我i们快速的了解到,我们的向量里是不是有这样的一个值,满足给定条件,只要至少有一个,那么就返回T,否则返回F。
我们对any的使用除了读取数据后查看一下,另外就是进行判断IF语句的时候会用到它,后面使用到的时候大家要知道是怎么回事。
All函数
最后,我们来讲解一下all函数,all函数可以说是any函数的相反的函数。它的功能和any函数正好相反,它可以查看向量里所有值都满足给定条件,只要至少有一个不满足,那么就返回F,否则返回T.
给出点案例看一看
> d <- 1:20
> all(d < 2)
[1] FALSE
> all(d > 5)
[1] FALSE
> all(d > 1)
[1] FALSE
> all(d > 0)
[1] TRUE
> all(d == 16)
[1] FALSE
我们发现大多数都是False,只有我们的d>0的时候返回了True,因为我们所有的值都是大于0的,所以才会返回T。
我们的all函数其实是个比较严酷的筛选,有的时候我们写程序会进行异常处理,抛出异常,这个时候all函数也会有一席之地,看看运算结果是什么样的,如果有不正常的影响了后续处理,就抛出异常,停止代码。
以上就是今天的所有内容了,是不是非常的简单呢?any和all,大家知道i有这两个概念即可,但是NA和NULL都是很重要的概念,进行数据分析和处理会经常和这两个值,以及后面会讲到的NaN Inf值,所以一定要知道对我们的运算产生什么影响,如果做简单的处理,才能在实操中得心应手。
下次内容更精彩哦,关注不迷路!
如果你喜欢我的文章,请收藏我的文章并且给我个赞,你的支持就是我更新的最大的动力,关注我会有更多惊喜哦,专注于生物信息学以及数据分析入门和进阶教程,也许我给不了你从10-100,但是我可以给你最好的从0-10!
最后,关注我的公众号,领取更多学习资料吧!!!
打开v搜索,”轻松玩转生信“或者从下面文章进去获取二维码关注哦