“ 今天是向量的倒数第二组内容,也是整个向量中最重要的内容,并且是后面数据处理百分之一百会用到的操作 - 筛选。”
向量的基本内容已经讲解的差不多了,后面很快会出一个R语言编程教程的合集,对每一节的内容进行标题简介。而今天,就讲解关于向量如何进行值的筛选即,向量的筛选问题。
大家可不要小看了向量的筛选问题,后面我们处理矩阵,处理数据框,一定会用到筛选功能,从特定的列中筛选出我们想要的内容,或者想要的索引,然后对所有行进行取值,得到我们筛选后的结果。最经典的操作,筛选我们想要的基因类型,筛选p值以及联合筛选等等。
在R语言中,对某一个向量进行筛选的操作是具有三种形式的,但是大多数得到的结果都是布尔值,然后使用我们前面学过的索引的知识进行索引操作。
直接生成筛选索引
最简单的索引生成方法就是直接生成筛选的索引,什么叫直接生成呢?我们都知道,很多操作都会返回一个布尔值,比如大小比较,布尔运算以及特定运算符的使用,又因为R是向量化进行操作的,所以返回的布尔值可以作为索引传给向量进行筛选操作。
# 筛选向量a中大于5的值
> a <- 1:10
> a[a>5]
[1] 6 7 8 9 10
# 筛选b中小于0的值
> b <- -5:5
> b[b<=0]
[1] -5 -4 -3 -2 -1 0
# 筛选b小于0的位置的a的值
> a[b<0]
[1] 1 2 3 4 5
上面就是比较基本的直接筛选方法了,很多时候使用这种方法进行筛选其实就够用了,但是为了更加通用和健壮的筛选,R还提供了后面两种筛选方式。
subset筛选
在介绍subset筛选之前,先给大家列出来一个普通的筛选完成的不太好的操作
# 有NA值的情况下进行直接筛选
> c <- c(1:3,NA,rep(2,2))
> c[c == 2]
[1] 2 NA 2 2
我们可以看到,NA值还在这里摆着,并没有随着我们的筛选直接被带走,如果我们想一并删除NA值,我们可以使用subset函数。
> subset(c,c == 2)
[1] 2 2 2
subset的第一个参数是一个向量,矩阵或者数据框,后面跟的是筛选条件,然后R就会自然对你的值进行筛选了,并且返回给你筛选结果,后面讲解数据框结构的时候还会再次提及这个函数,此处不多赘述。
我们的subset和普通的筛选就有这一点的差别,关于处理NA的问题,而我们接下来将的筛选函数则不同,它给我们返回符合条件的值的索引。
which函数
这个which函数可不是我们在Linux中讲过的which函数,它是用来取我们的向量筛选的索引的。
which函数的参数也非常简单,你只需要给它传入一个筛选条件,它就会对筛选条件进行筛选,然后得到筛选结果的索引值,你可以使用索引值进行索引(话说这样你为啥不用subset),也可以使用这个值进行其它的操作。
# 获得筛选索引
> which(c == 2)
[1] 2 5 6
# 使用筛选索引进行筛选
> c[which(c == 2)]
[1] 2 2 2
# 再筛一个
> a[which(a > 7)]
[1] 8 9 10
上面就是我们的which函数的操作了,对向量的筛选其实是非常简单的操作,但是对于我们的数据处理却极其重要。而且很多时候我们没必要使用dplyr这种复杂的包,直接进行筛选是数据分析人员必备的一个基础技能。
上面就是这篇文章的全部分享内容了,下一篇文章将是向量部分的最后一篇文章,首先是分享常用的几个函数,去重,逆置以及排序操作,最后是进行一点小小的总结,完成向量部分的讲解。
下次内容更精彩哦,关注不迷路!
如果你喜欢我的文章,请收藏我的文章并且给我个赞,你的支持就是我更新的最大的动力,关注我会有更多惊喜哦,专注于生物信息学以及数据分析入门和进阶教程,也许我给不了你从10-100,但是我可以给你最好的从0-10!
最后,关注我的公众号,领取更多学习资料吧!!!
打开v搜索,”轻松玩转生信“或者从下面文章进去获取二维码关注哦