2011-08-04 37 views
2

例如,我有一個數據框,其中包含跨類別和子類別的數據,我希望能夠在特定列中獲得具有最大值的行。如何在R數據框上執行SQL操作?

SQL是首先想到的。但是因爲我對連接或索引等不感興趣,所以python的列表解析會用更現代的語法更好地完成同樣的事情。

R對這些操作的最佳做​​法是什麼?

編輯: 現在我認爲我很好,which.max。爲什麼我問這個問題,我所做的只是簡單地告訴我,在R中有很多類庫,它們的功能都差不多。僅僅通過閱讀文檔,就很難評估它的流行程度(即圖書館如何實現其目的)。我個人使用Python的經驗是,當你弄清楚如何使用列表解析(itertools作爲獎勵)時,你幾乎可以覆蓋。隨着時間的推移,這已經演變爲最佳實踐,你不會看到lambdafilter,例如在目前一般python辯論中經常出現的情況,因爲列表解析可以更簡單,更統一。

+0

我懷疑這是有點太模糊。 R中的最佳實踐將取決於您尋求的特定數據摘要以及數據的排列方式。對於你的一個具體例子總是有'which.max'。 – joran

回答

3

一些額外的上下文會有幫助,但從它的聲音 - 您可能正在尋找which.max()或相關的功能。對於按操作分組,我默認爲plyr函數族,但是如果速度是最重要的,基類R中肯定會有更快的替代方案。

library(plyr) 
#Make a local copy of mycars data and add the rownames as a column since ddply 
#seems to drop them. I've never encountered that before actually... 
myCars <- mtcars 
myCars$carname <- rownames(myCars) 

#Find the max mpg 
myCars[which.max(myCars$mpg) ,] 

       mpg cyl disp hp drat wt qsec vs am gear carb  carname 
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.9 1 1 4 1 Toyota Corolla 

#Find the max mpg by cylinder category 
ddply(myCars, "cyl", function(x) x[which.max(x$mpg) ,]) 

    mpg cyl disp hp drat wt qsec vs am gear carb   carname 
1 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 Toyota Corolla 
2 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 Hornet 4 Drive 
3 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 Pontiac Firebird 
相關問題