前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >六、调整元素顺序--sort、order、match

六、调整元素顺序--sort、order、match

原创
作者头像
叮当猫DDM
修改2023-02-25 22:32:14
4570
修改2023-02-25 22:32:14
举报
文章被收录于专栏:叮当猫学生信叮当猫学生信

生信技能树学习之调整元素顺序--sort、order、match

###如何调整元素顺序

代码语言:javascript
复制
x <- c("A","B","C","D","E");x  

[1]"A" "B" "C" "D" "E"

代码语言:javascript
复制
x[c(2, 4, 5, 1, 3)]    

[1] "B" "D" "E" "A" "C"

代码语言:javascript
复制
scores = c(100,59,73,95,45);scores  

[1] 100 59 73 95 45

代码语言:javascript
复制
sort(scores)        ##sort(x, decreasing = FALSE, ...)    sort 默认参数decreasing = FALSE 按升序排列

[1] 45 59 73 95 100

代码语言:javascript
复制
scores[c(5,2,3,4,1)] 

[1]45 59 73 95 100

代码语言:javascript
复制
scores[order(scores)] 

[1]45 59 73 95 100

order有什么用? Sort(x) 等于 x[order(x)]

对x取子集的逻辑值向量,只要是和x对应就行,不用是由x生成的。也就是中括号外边的x和小括号内的x可以不一样,中括号外边的x可以换成与x对应的其他向量。

例:#scores依次属于以下几个小朋友 #如何按照分数从低到高给小朋友的名字排序?

代码语言:javascript
复制
scores = c(100,59,73,95,45);scores
kids = c("jimmy","nicker","Damon","Sophie","tony")
kids[order(scores)]      ##这里面kids和scores是对应的关系 

[1]"tony" "nicker" "Damon" "Sophie" "jimmy"

### match

代码语言:javascript
复制
x <- c("A","B","C","D","E");x         ### "A" "B" "C" "D" "E"
x[c(2, 4, 5, 1, 3)]                   ### "B" "D" "E" "A" "C"
y <- c("B","D","E","A","C") 
match(y,x)                            ### 2 4 5 1 3
x[match(y,x)]                         ### "B" "D" "E" "A" "C"

match:谁在外面,谁就在后面。

x[match(y,x)] ##x在中括号[]外面,所以match函数中x就放在后面

以y为模版,把x变得和y一样。得到的是x的下标。输出的结果和y一样

代码语言:javascript
复制
load("matchtest.Rdata")
colnames(y)
x$file_name

##内容相同顺序不同的两个向量

##判断x$file_name 中的每个元素是否在colnames(y)中存在,

##或者判断colnames(y)中的每个元素是否在x$file_name中存在,并统计数量。

##模版x %in% y

代码语言:javascript
复制
colnames(y) %in% x$file_name
x$file_name %in% colnames(y)
table(colnames(y) %in% x$file_name)

#sum求和,逻辑值怎么求和?T=1,F=0

代码语言:javascript
复制
sum(colnames(y) %in% x$file_name)

#使用match来匹配,获取下标

#模版 xmatch(y,x),以y为模版,x为原料,得到x的下标,把x变得和y一样。

#套用 y替换成colnames(y),x替换成x$file_name

x$file_namematch(colnames(y),x$file_name) #生成的结果应该和colnames(y)一样

如何确认两个数据一摸一样, 函数identical判断两个数据完全一致,数据类型相同,结构相同,内容和顺序也相同。

代码语言:javascript
复制
colnames(y) == x$file_namematch(colnames(y),x$file_name) 
identical(colnames(y),x$file_namematch(colnames(y),x$file_name) )

#为了确认match得到的下标正确,当按照x$file_name这组下标取子集的时候,就会变得和colnames(y) 一样。

#移花接木,如果a和b是对应的,那么a的下标就可以给b使用

### x$file_name,x$ID对应,下标通用

代码语言:javascript
复制
x$file_namematch(colnames(y),x$file_name)
x$IDmatch(colnames(y),x$file_name)

#x$file_namematch(colnames(y),x$file_name) 返回结果和colnames(y)一致

#x$file_namematch(colnames(y),x$file_name) 结果又与x$IDmatch(colnames(y),x$file_name)结果对应,

#colnames(y)与x$IDmatch(colnames(y),x$file_name)对应

代码语言:javascript
复制
colnames(y)=x$IDmatch(colnames(y),x$file_name)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ###如何调整元素顺序
  • order有什么用? Sort(x) 等于 x[order(x)]
  • ### match
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com