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

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

如何按多列對數據框進行排序

如何按多列對數據框進行排序

慕沐林林 2019-05-24 16:08:03
如何按多列對數據框進行排序我想按多列對data.frame進行排序。例如,對于下面的data.frame,我想按列z(降序)然后按列b(升序)排序:dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"),       levels = c("Low", "Med", "Hi"), ordered = TRUE),      x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),      z = c(1, 1, 1, 2))dd    b x y z1  Hi A 8 12 Med D 3 13  Hi A 9 14 Low C 9 2
查看完整描述

4 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

德克的答案很棒。它還強調了用于索引data.frames和data.tables 的語法的主要區別:

## The data.frame waydd[with(dd, order(-z, b)), ]## The data.table way: (7 fewer characters, but that's not the important bit)dd[order(-z, b)]

這兩個電話之間的差異很小,但它可能會產生重要影響。特別是如果您編寫生產代碼和/或關注研究中的正確性,最好避免不必要的重復變量名稱。data.table 幫助你做到這一點。

這是一個如何重復變量名稱可能會讓您陷入麻煩的示例:

讓我們從Dirk的答案中改變背景,并說這是一個更大的項目的一部分,其中有很多對象名稱,它們很長很有意義; 而不是dd它被稱為quarterlyreport。它成為了 :

quarterlyreport[with(quarterlyreport,order(-z,b)),]

好的。沒有錯。接下來,您的老板要求您在報告中包含上一季度的報告。你仔細檢查代碼,lastquarterlyreport在各個地方添加一個對象,以某種方式(地球上怎么樣?)你最終會得到這個:

quarterlyreport[with(lastquarterlyreport,order(-z,b)),]

這不是你的意思,但你沒有發現它,因為你做得很快,而且它坐落在一個類似代碼的頁面上。代碼不會失?。]有警告也沒有錯誤),因為R認為這就是你的意思。你希望看到你的報告的人發現它,但也許他們沒有。如果您經常使用編程語言,那么這種情況可能都是熟悉的。你會說這是一個“錯字”。我會解決你對老板說的“拼寫錯誤”。

data.table我們關注這樣微小的細節。所以我們做了一些簡單的事情,以避免兩次輸入變量名。非常簡單。idd自動框架內進行評估。你根本不需要with()。

代替

dd[with(dd, order(-z, b)), ]

只是

dd[order(-z, b)]

而不是

quarterlyreport[with(lastquarterlyreport,order(-z,b)),]

只是

quarterlyreport[order(-z,b)]

這是一個非常小的差異,但它可能只是有一天挽救你的脖子。權衡此問題的不同答案時,請考慮將變量名稱的重復計算為您決定的標準之一。有些答案有不少重復,有些則沒有。


查看完整回答
反對 回復 2019-05-24
?
Helenr

TA貢獻1780條經驗 獲得超4個贊


這里有很多優秀的答案,但是dplyr提供了我能夠快速且容易記住的唯一語法(現在經常使用):


library(dplyr)

# sort mtcars by mpg, ascending... use desc(mpg) for descending

arrange(mtcars, mpg)

# sort mtcars first by mpg, then by cyl, then by wt)

arrange(mtcars , mpg, cyl, wt)

對于OP的問題:


arrange(dd, desc(z),  b)


    b x y z

1 Low C 9 2

2 Med D 3 1

3  Hi A 8 1

4  Hi A 9 1


查看完整回答
反對 回復 2019-05-24
  • 4 回答
  • 0 關注
  • 1815 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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