生信入门学习笔记(第2天),今天主要学习了对向量的一些操作,由生信技能树的小洁老师主讲,整理如下。
Point 1:向量的生成
:
使用冒号可以生成连续的整数,此时不需要使用c();
> 1:5
[1] 1 2 3 4 5
c()
使用c()生成向量,这是最基本的生成向量的用法,注意两个或两个以上的元素使用c()括起来才能形成向量;
注意向量包含的数据类型相同;
> c(1,2,3)
[1] 1 2 3
> c("a","b","c","d","e")
[1] "a" "b" "c" "d" "e"
rep(),seq(),rnorm()
rep()函数通过将一个元素或向量重复出现若干次生成向量;
> rep(c("a","b"), times = 3)
[1] "a" "b" "a" "b" "a" "b"
> rep(c("a","b"), each = 3)
[1] "a" "a" "a" "b" "b" "b"
seq()函数可生成等差数列,from,to,by可省略,位置对即可;
> seq(from=1, to=11, by=2)
[1] 1 3 5 7 9 11
> seq(1,11,2)
[1] 1 3 5 7 9 11
rnorm()函数可生成随机数;
> rnorm(n=4, mean=0, sd=3)
[1] -0.4717126 1.9006675 -4.0859391 0.7837871
paste0(),paste()
paste0函数和paste()函数均可将两个向量中的元素一一对应连接,但是paste有空格paste0没有,paste也可以通过seq参数设置连接符号;
遵循循环补齐原则,比较短的向量中的元素循环出现去和较长的向量中的元素一一对应连接;
> paste0(c("a","b","c"),c(1,2,3))
[1] "a1" "b2" "c3"
> paste0(c("a","b"),c(1,2,3))
[1] "a1" "b2" "a3"
> paste0(c("a","b","c"),c(1,2,3))
[1] "a1" "b2" "c3"
> paste0("a",c(1,2,3))
[1] "a1" "a2" "a3"
> paste("a",c(1,2,3))
[1] "a 1" "a 2" "a 3"
Point 2:对单个向量进行操作的一些函数
几个非常简单的统计函数
x <- c(1,3,5,1)
#定义了一个名为x的向量
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位数
var(x) #方差
sd(x) #标准差
sum(x) #总和
#我们以前算起来很复杂的东西,在R里面一行代码就搞定了
几个比较重要的常用的函数
length()函数
这个函数用来计算向量的长度,也就是一个向量中包含了几个元素;
> x <- c(1,3,5,1)
> length(x)
[1] 4
unique()函数
去除重复值,保留第一个出现的值,后面再出现的时候去掉;
> x <- c(1,3,5,1)
> unique(x)
[1] 1 3 5
table()函数
计算一个向量中非重复的值每个出现了几次;
> x <- c(1,3,5,1)
> table(x)
x
1 3 5
2 1 1
#输出结果中第一行是变量名称,第二行是去重后的值,第三行是每个值出现了几次
sort()函数
对向量中的数值进行排序,默认是升序排序;
如果想要降序排序,x后面加逗号,点Tab键弹出函数可选的参数,将降序排列的参数设置为T即可;
注意这种Tab键弹出参数选项的方法也可以应用于其他函数;
> x <- c(1,3,5,1)
> sort(x)
[1] 1 1 3 5
> sort(x,decreasing = T)
#没有设置某个参数的时候函数会执行默认的参数
[1] 5 3 1 1
Point 3:如何对向量取子集?
取子集有两种思路,一种是生成与向量等长度的逻辑值,然后取返回值为TRUE的值;
另一种思路是根据位置取子集;
取子集的符号为中括号[];
根据逻辑值取子集
> x <- c(1,3,5,1);x
[1] 1 3 5 1
> x>2 #生成与向量等长的逻辑值
[1] FALSE TRUE TRUE FALSE
> x[x>2] #取x>2的元素
[1] 3 5
根据位置取子集
> x <- c("ACTR3B","ANLN","BAG1","BCL2","BIRC5","RAB","ABCT","ANLN","BAD","BCF","BARC7","BALV")
> x[c(1,3,5,7,9,11)]
[1] "ACTR3B" "BAG1" "BIRC5" "ABCT" "BAD" "BARC7"
> x[seq(1,11,2)]
[1] "ACTR3B" "BAG1" "BIRC5" "ABCT" "BAD" "BARC7"
Point 4:如何修改向量中的元素?
本质上就是先选择某个/某些元素,然后再对这些元素进行赋值;
> x
[1] 1 3 5 6 3
> x[2] <- 11 #修改一个元素
> x
[1] 1 11 5 6 3
> x[c(3,4)] <- c(9,8) #修改多个元素
> x
[1] 1 11 9 8 3
Point 5:如何对向量取交集、并集、差集?
使用intersect(),union(),setdiff()函数;
> x = c(1,3,5,6,3)
> y = c(3,1,5,2,4)
> intersect(x,y)
[1] 1 3 5
> union(x,y)
[1] 1 3 5 6 2 4
> setdiff(x,y) #哪个在前面就取哪个里面特有的元素
[1] 6
> setdiff(y,x)
[1] 2 4
Point 6:x==y与x%in%y有何不同?
x==y表示比较两个向量对应位置上的元素是否相同,相同则返回TRUE,不同则返回FALSE;
x%in%y表示x中的元素在y中是否存在,不强调位置,只要存在就返回TRUE,返回的逻辑值对应x中的每个元素;
> x = c(1,3,5,6,3)
> y = c(3,1,5,2,4)
> x==y
[1] FALSE FALSE TRUE FALSE FALSE
> x%in%y
[1] TRUE TRUE TRUE FALSE TRUE
Point 7:match()函数的使用
match()函数可用于调整向量中元素的顺序,如下所示:
> x <- c("a","b","c","d","e")
> y <- c("c","d","a","e","b")
> match(x,y) #会生成一个索引
[1] 3 5 1 2 4 #表示x中的每一个元素在y中的第几位
> y[match(x,y)] #谁在外面和后面要调整的就是谁,x的位置是模板
[1] "a" "b" "c" "d" "e"
此函数后续可用于调整数据框中列的顺序,具体可参考小洁老师的这篇文章数据框列的顺序错乱,如何重排。
— THE END —
▉ 往期精彩内容推荐
生信入门学习笔记系列
基础免疫学系列
肿瘤免疫学系列
即将开始,敬请期待!
基础实验技术系列
Annexin V/PI染色检测细胞凋亡-OncoLab实验室
仪器使用系列
蔡司LSM800激光共聚焦显微镜操作视频-中西医结合基础研究中心
IN Cell Analyzer2200高内涵细胞成像分析系统操作教程-中西医结合基础研究中心
文献分享系列
年度巨献:神刊CA发布最新癌症数据:全球1000万人死于癌症,中国占比超3成
HLA-I分子加工和递呈抗原功能受损是免疫检查点抑制剂耐药的重要原因
作图投稿选刊系列
GraphPad+AI制作可发表级别的柱状图-OncoLab实验室
PubMed中如何按影响因子筛选检索结果并显示影响因子及分区?
如何使用EndNote软件插入参考文献(附6813种杂志参考文献格式文件)
健康养生系列

长按上方二维码即可关注本号~
本篇文章来源于微信公众号:OncoLab