簡體   English   中英

如何在R數據幀上執行SQL操作?

[英]How can I do SQL like operations on a R data frame?

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

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

對於此類操作,R的最佳做法是什么?

編輯:現在我覺得我很好用which.max 為什么我問我這樣做的問題只是因為我已經知道在R中有許多庫等做同樣的事情。 只需閱讀文檔,就很難評估受歡迎程度(即圖書館達到目的的程度)。 我個人使用Python的經驗是,當你弄清楚如何使用列表itertools (使用itertools作為獎勵)的那一天,你幾乎被覆蓋了。 隨着時間的推移,這已經發展成為最佳實踐,你沒有看到lambdafilter ,例如,這些天經常在一般的python辯論中,因為列表推導使同樣的事情更容易和更均勻。

如果你真的是指SQL,那么'sqldf'包就是一個非常簡單的答案:

http://cran.at.r-project.org/web/packages/sqldf/index.html

來自?sqldf的幫助

library(sqldf)
a1s <- sqldf("select * from warpbreaks limit 6")

一些額外的上下文會有所幫助,但從它的聲音 - 你可能正在尋找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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM