亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

理解order()函數

理解order()函數

守著一只汪 2019-08-02 14:11:24
理解order()函數我試圖了解該order()功能的工作原理。我的印象是它返回了索引的排列,當排序時,它會對原始向量進行排序。例如,> a <- c(45,50,10,96)> order(a)[1] 3 1 2 4我本來希望這會返回c(2, 3, 1, 4),因為排序的列表將是10 45 50 96。有人能幫我理解這個函數的返回值嗎?
查看完整描述

3 回答

?
大話西游666

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的折線圖。

我打賭你在考慮排名。


查看完整回答
反對 回復 2019-08-02
?
眼眸繁星

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'用于創建索引數組(指定要排序的列的排序順序),然后將其用作索引數組以重新排序數據框(或矩陣)。


查看完整回答
反對 回復 2019-08-02
?
汪汪一只貓

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


查看完整回答
反對 回復 2019-08-02
  • 3 回答
  • 0 關注
  • 1687 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號