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