我想了解order()
函數的工作原理。我的印象是,它返回了索引的排列,當排序時,它會對原始向量進行排序。瞭解訂單()函數
例如,
> a <- c(45,50,10,96)
> order(a)
[1] 3 1 2 4
我本來期望這回c(2, 3, 1, 4)
,因爲排序的名單將是10 45 50 96
有人能幫助我理解這個函數的返回值?
我想了解order()
函數的工作原理。我的印象是,它返回了索引的排列,當排序時,它會對原始向量進行排序。瞭解訂單()函數
例如,
> a <- c(45,50,10,96)
> order(a)
[1] 3 1 2 4
我本來期望這回c(2, 3, 1, 4)
,因爲排序的名單將是10 45 50 96
有人能幫助我理解這個函數的返回值?
This似乎可以解釋它。
的
order
定義是a[order(a)]
是 遞增的順序。這適用於您的示例,其中正確的 順序是第四,第二,第一,然後是第三個元素。你可能一直在尋找
rank
,返回 要素的排名
R> a <- c(4.1, 3.2, 6.1, 3.1)
R> order(a)
[1] 4 2 1 3
R> rank(a)
[1] 3 2 4 1
所以rank
告訴你什麼樣的順序號在,order
告訴你如何讓它們按升序排列。
plot(a, rank(a)/length(a))
將給出CDF的圖表。要知道爲什麼order
是有用的,但是,嘗試plot(a, rank(a)/length(a),type="S")
這給出了一個爛攤子,因爲數據是不是在。如果你沒有遞增的順序
oo<-order(a)
plot(a[oo],rank(a[oo])/length(a),type="S")
或者乾脆
oo<-order(a)
plot(a[oo],(1:length(a))/length(a)),type="S")
你會得到CDF的折線圖。
我敢打賭你在考慮排名。
排序一維向量或數據的單個列,只需調用排序功能,並通過在你的序列。
在另一方面,順序功能是必要的數據維數據進行排序。 - 即,在一個矩陣或數據幀收集的數據的多個列。
Stadium Home Week Qtr Away Off Def Result Kicker Dist
751 Out PHI 14 4 NYG PHI NYG Good D.Akers 50
491 Out KC 9 1 OAK OAK KC Good S.Janikowski 32
702 Out OAK 15 4 CLE CLE OAK Good P.Dawson 37
571 Out NE 1 2 OAK OAK NE Missed S.Janikowski 43
654 Out NYG 11 2 PHI NYG PHI Good J.Feely 26
307 Out DEN 14 2 BAL DEN BAL Good J.Elam 48
492 Out KC 13 3 DEN KC DEN Good L.Tynes 34
691 Out NYJ 17 3 BUF NYJ BUF Good M.Nugent 25
164 Out CHI 13 2 GB CHI GB Good R.Gould 25
80 Out BAL 1 2 IND IND BAL Good M.Vanderjagt 20
這裏是在2008年的NFL賽季場均出手數據的摘錄,一個數據幀我已經被稱爲「FG」。假設這10個數據點代表了2008年嘗試的所有實地目標;進一步假設你想知道那一年嘗試的最長射門得分的距離,誰踢了它,以及它是否成功;你也想知道第二長和第三長等;最後你想要最短的投籃嘗試。
那麼,你可能只是這樣做:
sort(fg$Dist, decreasing=T)
返回:50 48 43 37 34 32 26 25 25 20
這是正確的,但不是非常有用 - 它告訴我們最長的投籃嘗試的距離,第二長的......以及最短的距離;然而,這只是我們所知道的 - 例如,我們不知道踢球者是誰,是否嘗試成功等等。當然,我們需要整個數據框按「Dist」列排序(換句話說,我們要DIST整理所有數據行對單個屬性 這將是這樣的:。
Stadium Home Week Qtr Away Off Def Result Kicker Dist
751 Out PHI 14 4 NYG PHI NYG Good D.Akers 50
307 Out DEN 14 2 BAL DEN BAL Good J.Elam 48
571 Out NE 1 2 OAK OAK NE Missed S.Janikowski 43
702 Out OAK 15 4 CLE CLE OAK Good P.Dawson 37
492 Out KC 13 3 DEN KC DEN Good L.Tynes 34
491 Out KC 9 1 OAK OAK KC Good S.Janikowski 32
654 Out NYG 11 2 PHI NYG PHI Good J.Feely 26
691 Out NYJ 17 3 BUF NYJ BUF Good M.Nugent 25
164 Out CHI 13 2 GB CHI GB Good R.Gould 25
80 Out BAL 1 2 IND IND BAL Good M.Vanderjagt 20
這是爲了確實它是二維的數據「排序」。 ;換言之,它返回由行號組成的一維整數索引,以便根據該向量對行進行排序,從而在列上給出正確的面向行的排序,D ist
下面是它的工作原理。以上,類被用來排列Dist列;對DIST列中的整個數據幀進行排序,我們使用「訂單」 完全相同的方式如上述使用「排序」:
ndx = order(fg$Dist, decreasing=T)
(ⅰ通常結合在陣列從「訂單」返回到可變。「NDX」,它表示 爲「索引」,因爲我要使用它作爲索引數組排序)
,這是第1步,這裏是第2步:
「NDX」,什麼是然後用'sort'返回,作爲索引數組重新排序 dataframe,'f g':
fg_sorted = fg[ndx,]
fg_sorted是緊接在上面的重新排序的數據幀。
總之,'sort'用於創建一個索引數組(它指定要排序的列的排序順序),然後將其用作索引數組來重新排序數據幀(或矩陣)。
-1:順序對於矢量來說很有意義。訂單的基本屬性 - [訂單(a)]排序 - 沒有明確說明。 – 2010-02-23 03:32:16
錯誤。你需要再看一遍 - 「基本屬性」的確在上面的兩行(灰色背景)代碼行中顯示得非常清晰。因爲排序w /'order'是兩個單獨的操作,我使用兩行代碼顯示了這一點 - 一個創建索引向量,第二行使用該索引執行排序。 OP要求解釋的不僅僅是一個結果,而且我給了他一個,他證明了他選擇了我的答案,並在「Thanks [m] akes perfect sense」上面寫了簡短說明。我甚至將最終結果綁定到一個名爲「fg_sorted」的變量。 – doug 2010-04-03 16:19:41
(我想這可能是有益的非常簡單地在這裏奠定了思想總結好材料張貼@doug,&鏈接通過@duffymo; +1到每個,順便說一句)
?order告訴你原始矢量的哪個元素需要放在第一個,第二個等位置,以便對原始矢量進行排序,而?rank則告訴您哪個元素具有最小值,第二小值等。例如:
> a <- c(45, 50, 10, 96)
> order(a)
[1] 3 1 2 4
> rank(a)
[1] 2 3 1 4
所以order(a)
在說,「先當把第三個元素,你的排序...',而rank(a)
則表示'第一個元素是第二低...'。 (請注意,他們都同意其元素是最低等;他們只是呈現的信息是不同的。)因此,我們看到,我們可以使用order()
排序,但我們不能用rank()
這樣:
> a[order(a)]
[1] 10 45 50 96
> sort(a)
[1] 10 45 50 96
> a[rank(a)]
[1] 50 10 45 96
在一般情況下,order()
將不等於rank()
除非載體已經被排序:
> b <- sort(a)
> order(b)==rank(b)
[1] TRUE TRUE TRUE TRUE
而且,由於order()
是(本質)操作過的數據的行列,你可以撰寫他們在不影響信息,但其他方式產生亂碼:
> order(rank(a))==order(a)
[1] TRUE TRUE TRUE TRUE
> rank(order(a))==rank(a)
[1] FALSE FALSE FALSE TRUE
'order'和'rank'實際上是相互顛倒的(至少只要'a'中的值是唯一的)。如果你想象它們的值都有名稱(/標籤)('1','2','3','4'),那麼'order(a)'的值告訴你'rank(a )'每個標籤都出現在(例如(a)'(3)的第一個值告訴你'rank(a)'的第三個位置出現'1',反之亦然(例如rank(a)'(3)的第二個值)告訴你'2'出現在'order(a)''的第三個位置。它們是相反的排列:「order(order(a))'='order(rank(a))'='1 2 3 4'' – 2013-09-27 06:43:27
」?order告訴你哪個原始矢量元素需要先放置,第二等,以便對原始矢量進行排序,而?rank指示哪個元素具有最低,第二低等等值。「那裏。這是所有人都必須說的。最後。謝謝!! – AleksandrH 2017-12-29 21:03:32
簡潔地解釋了......需要什麼「?」順序告訴你哪個原始矢量的哪個元素需要被放置第一,第二等,以便對原始矢量進行排序,而?rank告訴你哪個元素具有最低,第二最低值等。「 – sKaLiDhAsAn 2018-03-06 06:25:45
運行這一小段代碼讓我明白的順序功能
x <- c(3, 22, 5, 1, 77)
cbind(
index=1:length(x),
rank=rank(x),
x,
order=order(x),
sort=sort(x)
)
index rank x order sort
[1,] 1 2 3 4 1
[2,] 2 4 22 1 3
[3,] 3 3 5 3 5
[4,] 4 1 1 2 22
[5,] 5 5 77 5 77
參考:http://r.789695.n4.nabble.com/I-don-t-understand-the-order-function-td4664384.html
結果與輸入不匹配。你必須在'cbind()'中使用另一個'x'。 – 2016-09-23 21:51:15
關於上述評論修改。希望這可以幫助 :) – adebesin 2016-09-24 12:38:18
這可以幫助你在某個時候。
a <- c(45,50,10,96)
a[order(a)]
你得到的是
[1] 10 45 50 96
我寫的代碼表示想要「一」作爲一個整體子集「一」,你希望它從最低責令最高值。
簡而言之,order()
給出了增加幅度的元素的位置。
例如,order(c(10,20,30))
會給1,2,3和 order(c(30,20,10))
會給3,2,1。
啊..我現在明白了。 order()以排序順序返回矢量的索引。非常好,非常感謝。 – jeffshantz 2010-02-23 02:27:48
'order(a,decrease = T)'和'rank(a)'會返回一個等價的答案。 – omar 2016-05-24 11:10:28
我有訂單問題。 'a <-c(4,2,1,80,13)' 然後'命令(a)'應該是'3 4 5 1 2',但奇怪的是我得到了'3 2 1 5 4'' – 2016-05-27 11:42:01