4 回答
TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
德克的答案很棒。它還強(qiáng)調(diào)了用于索引data.frames和data.tables 的語(yǔ)法的主要區(qū)別:
## 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)]
這兩個(gè)電話之間的差異很小,但它可能會(huì)產(chǎn)生重要影響。特別是如果您編寫(xiě)生產(chǎn)代碼和/或關(guān)注研究中的正確性,最好避免不必要的重復(fù)變量名稱。data.table 幫助你做到這一點(diǎn)。
這是一個(gè)如何重復(fù)變量名稱可能會(huì)讓您陷入麻煩的示例:
讓我們從Dirk的答案中改變背景,并說(shuō)這是一個(gè)更大的項(xiàng)目的一部分,其中有很多對(duì)象名稱,它們很長(zhǎng)很有意義; 而不是dd它被稱為quarterlyreport。它成為了 :
quarterlyreport[with(quarterlyreport,order(-z,b)),]
好的。沒(méi)有錯(cuò)。接下來(lái),您的老板要求您在報(bào)告中包含上一季度的報(bào)告。你仔細(xì)檢查代碼,lastquarterlyreport在各個(gè)地方添加一個(gè)對(duì)象,以某種方式(地球上怎么樣?)你最終會(huì)得到這個(gè):
quarterlyreport[with(lastquarterlyreport,order(-z,b)),]
這不是你的意思,但你沒(méi)有發(fā)現(xiàn)它,因?yàn)槟阕龅煤芸?,而且它坐落在一個(gè)類似代碼的頁(yè)面上。代碼不會(huì)失?。](méi)有警告也沒(méi)有錯(cuò)誤),因?yàn)镽認(rèn)為這就是你的意思。你希望看到你的報(bào)告的人發(fā)現(xiàn)它,但也許他們沒(méi)有。如果您經(jīng)常使用編程語(yǔ)言,那么這種情況可能都是熟悉的。你會(huì)說(shuō)這是一個(gè)“錯(cuò)字”。我會(huì)解決你對(duì)老板說(shuō)的“拼寫(xiě)錯(cuò)誤”。
在data.table我們關(guān)注這樣微小的細(xì)節(jié)。所以我們做了一些簡(jiǎn)單的事情,以避免兩次輸入變量名。非常簡(jiǎn)單。i在dd自動(dòng)框架內(nèi)進(jìn)行評(píng)估。你根本不需要with()。
代替
dd[with(dd, order(-z, b)), ]
只是
dd[order(-z, b)]
而不是
quarterlyreport[with(lastquarterlyreport,order(-z,b)),]
只是
quarterlyreport[order(-z,b)]
這是一個(gè)非常小的差異,但它可能只是有一天挽救你的脖子。權(quán)衡此問(wèn)題的不同答案時(shí),請(qǐng)考慮將變量名稱的重復(fù)計(jì)算為您決定的標(biāo)準(zhǔn)之一。有些答案有不少重復(fù),有些則沒(méi)有。
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
這里有很多優(yōu)秀的答案,但是dplyr提供了我能夠快速且容易記住的唯一語(yǔ)法(現(xiàn)在經(jīng)常使用):
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)
對(duì)于OP的問(wèn)題:
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
- 4 回答
- 0 關(guān)注
- 1829 瀏覽
添加回答
舉報(bào)
