如何在R数据帧上执行SQL操作?

时间:2011-08-04 02:53:42

标签: sql r list-comprehension dataframe

例如,我有一个数据框,其中包含跨类别和子类别的数据,我希望能够在特定列等中获得具有最大值的行。

首先想到的是SQL。但是由于我对连接或索引等不感兴趣,python的列表推导会用更现代的语法更好地做同样的事情。

对于此类操作,R的最佳做法是什么?

编辑: 现在我觉得我对which.max很好。为什么我问我这样做的问题只是因为我已经知道在R中有许多库等做同样的事情。只需阅读文档,就很难评估受欢迎程度(即图书馆达到目的的程度)。我个人使用Python的经验是,当你弄清楚如何使用列表推导(以itertools作为奖励)的那一天,你几乎被覆盖了。随着时间的推移,这已经发展成为最佳实践,你没有看到lambdafilter,例如,这些天通常在一般的python辩论中,因为列表推导使同样的事情变得更容易和更均匀。

2 个答案:

答案 0 :(得分:7)

如果你的意思是SQL,那么'sqldf'包就是一个非常简单的答案:

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

来自?sqldf的帮助

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

答案 1 :(得分: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