3 回答

TA貢獻1817條經驗 獲得超14個贊
這似乎可以解釋它。
的定義
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的折線圖。
我打賭你在考慮排名。

TA貢獻1873條經驗 獲得超9個贊
要對1D向量或單列數據進行排序,只需調用sort函數并傳入序列。
另一方面,順序函數對于對數據二維數據進行排序是必要的- 即,在矩陣或數據幀中收集的多列數據。
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
這就是訂單的作用。它是二維數據的“排序”; 換一種說法,它返回由行號這樣的一維整數索引排序行根據該矢量,會給你的專欄,正確的面向行的排序DIST
這是它的工作原理。上面,sort用于對Dist列進行排序; 要對Dist列上的整個數據框進行排序,我們使用'order' 與上面使用的'sort'完全相同:
ndx = order(fg$Dist, decreasing=T)
(我通常將從'order'返回的數組綁定到變量'ndx',它代表'index',因為我將它用作索引數組來排序。)
那是第1步,這是第2步:
'ndx','sort'返回的內容然后用作索引數組來重新排序數據幀'fg':
fg_sorted = fg[ndx,]
fg_sorted是緊接在上面的重新排序的數據幀。
總而言之,'sort'用于創建索引數組(指定要排序的列的排序順序),然后將其用作索引數組以重新排序數據框(或矩陣)。

TA貢獻1898條經驗 獲得超8個贊
?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
- 3 回答
- 0 關注
- 1687 瀏覽
添加回答
舉報