數據排序

數據排序

 

一、sort(),rank(),order()函數函數

 

 

Sortspa

排序(默認升序,decreasing=T時爲降序).net

Ordercode

排序(默認升序,decreasing=T時爲降序)blog

 

 

在R中,和排序相關的函數主要有三個:sort(),rank(),order()。排序

    sort(x)是對向量x進行排序,返回值排序後的數值向量。rank()是求秩的函數,它的返回值是這個向量中對應元素的「排名」。而order()的返回值是對應「排名」的元素所在向量中的位置。ip


    下面以一小段R代碼來舉例說明:ci

[plain]  view plain  copy
 
 
  print ? 在CODE上查看代碼片派生到個人代碼片
  1. x<-c(97,93,85,74,32,100,99,67)  
  2. sort(x)  
  3. [1]  32  67  74  85  93  97  99 100  
  4. order(x)  #order()的返回值是各個排名的學生成績所在向量中的位置  
  5. [1] 5 8 4 3 2 1 7 6  
  6. rank(x)  #rank()的返回值是這組學生所對應的排名  
  7. [1] 6 5 4 3 1 8 7 2  

 

深刻理解一下:get

sort()在單變量排序中,效果較好;it

order()≈原序號(sort())  由於能夠標記排序好以後的下標,在數據框中的排序操做,實用性超強,能夠實現:

一、整個數據集按照某個變量(好比:按月份大小)排序;

二、整個數據集其中某個變量依據第二個變量(好比:月份)排序。

 

[plain]  view plain  copy
 
 print?在CODE上查看代碼片派生到個人代碼片
  1. iris;iris[1:10,]  
  2. names(iris)  
  3.   
  4. #單數據列,二者相同  
  5. sort(iris$Sepal.Length)  
  6. iris$Sepal.Length[order(iris$Sepal.Length)]   
  7.   
  8. #多數據列,order有奇效  
  9. iris[order(iris$setosa),]                 #按照setosa的大小,重排整個數據集  
  10. iris$Sepal.Length[order(iris$setosa)]     #按照照setosa的大小,重排Sepal.Length數據列  
  11. iris[order(iris$setosa),]$Sepal.Length    #與上句殊途同歸  


與which有一些地方的類似,which能夠實現返回服從條件觀測的行數。which又與subset子集篩選有關。(詳見which、subset子集篩選用法

 

[plain]  view plain  copy
 
 print?在CODE上查看代碼片派生到個人代碼片
  1. data$V1[which(data$V2<0)]                 #篩選出V1中,V2小於0的數字,跟order的做用些許類似  
  2. #order用法  
  3. iris$Sepal.Length[order(iris$setosa)]     #按照照setosa的大小,重排Sepal.Length數據列     

 

 

 

二、dplyr包的一些應用

 

 

[plain]  view plain  copy
 
 
  print ? 在CODE上查看代碼片派生到個人代碼片
    1. #dplyr中基本函數 arrange——數據排序  
    2. Hdma_dat[order(Hdma_dat$survived),] #傳統方法用order排序  
    3. arrange(Hdma_dat,survived) #將survived從小到大排序  
    4. arrange(Hdma_dat,desc(survived) #將survived從大到小排序  
    5. arrange(Hdma_dat,pclass,desc(survived) #先將pclass從小到大排序,再在那個數據基礎上讓survived從大到小排序  
相關文章
相關標籤/搜索