R語言學習筆記:sort、rank、order、arrange排序函數


  R語言中排序有幾個基本函數:sort()、rank()、order()、arrange()

一、總結

  sort()函數是對向量進行從小到大的排序

  rank()函數返回的是對向量中每個數值對應的秩

  order()函數返回的值表示位置,依次對應的是向量的最小值、次小值、第三小值……最大值等(位置索引)

  arrange()函數(需加載dplyr包)針對數據框,返回基於某列排序后的數據框,方便多重依據排序

二、具體用法

1.sort

data <- c(5,6,8,2,9,3) sort(data) # 2 3 5 6 8 9 sort(data, decreasing = TRUE) # 9 8 6 5 3 2

2.order

data <- c(5,6,8,2,9,3) order(data) # 4 6 1 2 3 5 data[order(data)] # 等同於sort(data)排序
d <- data.frame( x=c(13,45,13,45,13), y=c(3,1,2,2,3), t=c(56,7,68,3,1))
d
[order(d$x,d$y),] # x升序 y升序 /* x y t 3 13 2 68 1 13 3 56 5 13 3 1 2 45 1 7 4 45 2 3 */ d[order(-d$x,d$y),] # x降序 y升序 /* x y t 2 45 1 7 4 45 2 3 3 13 2 68 1 13 3 56 5 13 3 1 */

3.rank

# rank函數 rank(x, na.last = TRUE, ties.method = c("average","first","random","max","min"))
data <- c(5,6,8,2,9,3) rank(data) # 3 4 5 1 6 2

(1) rank 函數是對一維度數組、向量x 進行排序。若x 為數值,則按照從小到大的原則進行排序。

P.S. 實際情況中,存在大量用二維表格描述的數據,比如行表示地點列表示時間的統計表,若進行排序,應先通過字符拼接的手段將表格轉化為一維的向量,否則結果將失去意義。

(2) rank 將數據分為確定值與缺失值兩種。缺失值可按先后排在確定值之間(na.last = FALSE), 也可排在之后(na.last = TRUE), 也可保留,不參與排序(na.last = "keep")。

(3) "first" 是最基本的排序,小數在前大數在后,相同元素先者在前后者在后。

  "max" 是相同元素都取該組中最好的水平,即通常所講的並列排序。

  "min" 是相同元素都取該組中最差的水平,可以增大序列的等級差異。

  "average" 是相同元素都取該組中的平均水平,該水平可能是個小數。

  "random" 是相同元素隨機編排次序,避免了“先到先得”,“權重”優於“先后順序”的機制增大了隨機的程度。

4.arrange(dplyr)

library(dplyr) arrange(mtcars, cyl, disp) # 按 cyl + disp 列進行升序排列 mtcars[order(mtcars$cyl,mtcars$disp),] # 同上 /* mpg cyl disp hp drat wt qsec vs am gear carb 1 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 2 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 3 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 4 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 5 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 6 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 */ head(arrange(mtcars,cyl,desc(disp))) /* mpg cyl disp hp drat wt qsec vs am gear carb 1 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 2 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 3 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 4 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 5 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 6 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 */

END 2018-11-26 11:48:18


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM