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

2023-02-25 22:32:14 浏览数 (2)

生信技能树学习之调整元素顺序--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)

0 人点赞