“ 终于迎来了向量的终章,到这篇文章末为止,大部分代码里的向量操作都难不倒你了,和数据生成以及索引等的操作也都再不是问题,准备好腾飞到矩阵和数据框的世界吧!。”
作为向量部分的终结之章,这篇文章也要讲一些高端上档次的东西,或者说讲一些极其常用的分析操作,比如排序,逆置以及一些其它的东西,最后给大家来一个总结,升华主题,然后进入R矩阵的学习。
Sort和Order
首先,我们的第一部分要讲解的就是关于排序操作的知识。在R语言中,我们常用的排序有两个函数,sort和order函数。其中,sort返回我们排序后的结果,而order函数返回排序后的索引值。
二者都是比较轻便的函数,基本上可以满足简单的排序需求了。
下面先通过案例讲解sort函数
sort函数最基本的用法就是直接给个向量
然后返回递增的结果
sort(c(3,1,6,2,8))
[1] 1 2 3 6 8
如果你想返回递减的结果 请使用参数decreasing=T
sort(c(3,1,6,2,8),decreasing = T)
[1] 8 6 3 2 1
上面我们对数值型向量进行了排序,接下来我们对字符型进行排序
sort(c('bac','bab','aaa','opg'))
[1] "aaa" "bab" "bac" "opg"
通过仔细观测上述结果可以看出来,sort函数对字符串的排序是按照字符的顺序的,如果是多个字符进行排序的话会对字符依次进行排序,然后得到排序的结果并返回。
(别在这扯ascii码,扯多了会让你有些混乱,记住能排序数字和字符就够使了)
!!!!不要把数字和字符放在一个向量进行排序,这是不好的编程习惯!!!!
下面是关于order函数的讲解,这是个非常有意思的函数,它可以返回排序好的索引值,
order函数
order(c(2,4,1,3))
[1] 3 1 4 2
返回递增的索引
order(c(2,4,1,3),decreasing = T)
[1] 2 4 1 3
这里大家可能看的有些懵,可能我的样例取得不太好,我们这样看组一个索引和值的对,2 - 1, 4 - 2, 1 - 3, 3 - 4,后面是我们的索引值,然后排序的话,正确顺序的1 2 3 4,那么对应的索引就是 3 1 4 2 ,是不是和我们的第一返回值相同呢?如果反过来的2 4 3 1 就正好是递减的索引值了,这就是我们的order排序方法。
使用order排序结果
a <- c(2,4,3,1)
a[order(a)]
[1] 1 2 3 4
到这里可能很多人要说我多此一举了,这order和sort不是一个样子吗,还得多写一步浪费时间。我要告诉你并不是这样,比如我现在有一个数据框,想按照p值进行排序,我们使用order生成了排序索引,直接对行进行索引,不就直接得到了排序结果了吗?
逆置向量 - rev
这一部分的内容非常简单粗暴,就像我们的length函数一样。这里的函数名叫逆置向量函数,用大白话说起来就是把一个向量倒过来,这就是逆置。
rev函数
rev(c('a','c','b','r'))
[1] "r" "b" "c" "a"
rev(c(6,9,1,7))
[1] 7 1 9 6
一目了然,这就是逆置函数,简单粗暴的很。而真正的处理过程中,我们有些时候会把数据按照反顺序存进一个向量里,存好后逆置一下就能得到我们要的结果了。
unique和duplicated - 去重
上文讲解了逆置和排序操作,而我们实操的时候还有一个非常非常重要的操作 - 去重。这个名字不说大家也知道,这是非常重要的内容,也是数据分析中必不可少的一部分。
在R的base环境里,我们提供了两个有去重功能的函数,一个是unique,一个是duplicated。
下面给出实例进行讲解,
unique
unique(c(1,2,1,1,2,1))
[1] 1 2
unique(c(1,2,1,1,2,1,3))
[1] 1 2 3
在本章节,unique函数的作用就是这样,帮你找到不重复的值,然后进行输出.
而duplicated则是返回一组布尔值索引,方便你进行后续的操作(针对数据框)
duplicated(c(1,2,1,1,2,1))
[1] FALSE FALSE TRUE TRUE TRUE TRUE
duplicated(c(1,2,1,1,2,1,3))
[1] FALSE FALSE TRUE TRUE TRUE TRUE FALSE
!!!但是我们要注意 这里是索引是重复值的索引 想要不重复的需要使用!符号进行取反操作然后再进行索引!!!
a <- c(a,1,7,3,3,4)
取出重复位置
a[duplicated(a)]
[1] 1 3 3 4
取出非重复位置
a[!duplicated(a)]
[1] 2 4 3 1 7
上面就是关于使用R的基础环境进行去重的操作了!
大总结
最后的最后,给大家的向量之旅进行一个大总结,过于的6篇推文中,我们从向量的创建开始到如何索引向量,增加和删除向量的元素;然后取向量的长度,接下来学习了使用冒号运算符 seq和rep来生成向量;接下来,我们学习到两种非常重要的表示即 NA 和 NULL,然后我们学习了如何对向量中的值进行筛选,使用subset可以跳过缺失值,使用which可以获取索引值。
最后,今天我们学习了最最重要的排序方法,取排序的索引,逆置向量,对向量进行去重操作,取重复值和非重复位置的方法,其中很多方法后面还会有讲解,但是都是以应用为主了。
下一篇的内容将会开始讲解一个有些数学的概念 - 矩阵,在R中,矩阵本身是一种基本的数据类型,具有很多函数和方法来对其进行操作。
如果你喜欢我的文章,请收藏我的文章并且给我个赞,你的支持就是我更新的最大的动力,关注我会有更多惊喜哦,专注于生物信息学以及数据分析入门和进阶教程,也许我给不了你从10-100,但是我可以给你最好的从0-10!
最后,关注我的公众号,领取更多学习资料吧!!!
打开v搜索,”轻松玩转生信“或者从下面文章进去获取二维码关注哦