R语言杂谈(四)--排序
排序
sort() #默认是从小到大排序
sort(a,decreasing=T)#从大到小排序
举个例子,cat<-c(6 53 16 29 24 78 19 72 65)
sort(cat)为(6 16 19 24 29 53 65 72 78)
sort(cat, decreasing=T)为(78 72 65 53 29 24 19 16 6)
order也是排序但返回的是按从小到大排完后每个数在原来序列中的位置
order(cat)为(1 3 7 5 4 2 9 8 6)
cat[order(cat)] 返回的是sort(cat)
可以通过逻辑值获得我们所需要的队列:cat[cat==78]返回的就是78
which可以获得所在的位置:which(cat==78)返回的是6
还能怎么获取位置呢?
举个例子,我们设定d <- c("TP53","ERBB2","BRCA1")
## grep表示抓取,返回的是数字
grep("ERBB2",d) 返回的是 2
## grepl,表示grep+logical,返回的是逻辑值
grepl("ERBB2",d) 返回的是FALSE,TRUE,FALSE
## 使用逻辑值获取子集
d[grepl("ERBB2",d)] 返回的是 "ERBB2"
# 此时跟 %in% 的用法一样,A %in% B 表示A是否存在于B,返回的是逻辑
"ERBB2" %in% d 返回的是TRUE
d %in% "ERBB2" 返回的是FALSE TRUE FLASE
d[d %in% "ERBB2"] 返回的是"ERBB2"
## 取交集intersect(x,y) 很常用
d <- c("TP53","ERBB2","BRCA1")
e <- c("ERBB2","BRCA1","TP54")
intersect(d,e) 返回的是 "ERBB2" "BRCA1"
## 再试试%in%,操作逻辑是判断d中的每一个元素是否存在于e
d %in% e 返回的是 FALSE TRUE TRUE
d[d %in% e] 返回的是 "ERBB2" "BRCA1"