數據排序
一、sort(),rank(),order()函數函數
Sortspa |
排序(默認升序,decreasing=T時爲降序).net |
Ordercode |
排序(默認升序,decreasing=T時爲降序)blog |
在R中,和排序相關的函數主要有三個:sort(),rank(),order()。排序
sort(x)是對向量x進行排序,返回值排序後的數值向量。rank()是求秩的函數,它的返回值是這個向量中對應元素的「排名」。而order()的返回值是對應「排名」的元素所在向量中的位置。ip
下面以一小段R代碼來舉例說明:ci
- x<-c(97,93,85,74,32,100,99,67)
- sort(x)
- [1] 32 67 74 85 93 97 99 100
- order(x) #order()的返回值是各個排名的學生成績所在向量中的位置
- [1] 5 8 4 3 2 1 7 6
- rank(x) #rank()的返回值是這組學生所對應的排名
- [1] 6 5 4 3 1 8 7 2
深刻理解一下:get
sort()在單變量排序中,效果較好;it
order()≈原序號(sort()) 由於能夠標記排序好以後的下標,在數據框中的排序操做,實用性超強,能夠實現:
一、整個數據集按照某個變量(好比:按月份大小)排序;
二、整個數據集其中某個變量依據第二個變量(好比:月份)排序。
- iris;iris[1:10,]
- names(iris)
-
- #單數據列,二者相同
- sort(iris$Sepal.Length)
- iris$Sepal.Length[order(iris$Sepal.Length)]
-
- #多數據列,order有奇效
- iris[order(iris$setosa),] #按照setosa的大小,重排整個數據集
- iris$Sepal.Length[order(iris$setosa)] #按照照setosa的大小,重排Sepal.Length數據列
- iris[order(iris$setosa),]$Sepal.Length #與上句殊途同歸
與which有一些地方的類似,which能夠實現返回服從條件觀測的行數。which又與subset子集篩選有關。(詳見which、subset子集篩選用法)
- data$V1[which(data$V2<0)] #篩選出V1中,V2小於0的數字,跟order的做用些許類似
- #order用法
- iris$Sepal.Length[order(iris$setosa)] #按照照setosa的大小,重排Sepal.Length數據列
二、dplyr包的一些應用
- #dplyr中基本函數 arrange——數據排序
- Hdma_dat[order(Hdma_dat$survived),] #傳統方法用order排序
- arrange(Hdma_dat,survived) #將survived從小到大排序
- arrange(Hdma_dat,desc(survived) #將survived從大到小排序
- arrange(Hdma_dat,pclass,desc(survived) #先將pclass從小到大排序,再在那個數據基礎上讓survived從大到小排序