例如,我有一个数据框,其中包含跨类别和子类别的数据,我希望能够在特定列等中获得具有最大值的行。
首先想到的是SQL。但是由于我对连接或索引等不感兴趣,python的列表推导会用更现代的语法更好地做同样的事情。
对于此类操作,R的最佳做法是什么?
编辑:
现在我觉得我对which.max
很好。为什么我问我这样做的问题只是因为我已经知道在R中有许多库等做同样的事情。只需阅读文档,就很难评估受欢迎程度(即图书馆达到目的的程度)。我个人使用Python的经验是,当你弄清楚如何使用列表推导(以itertools
作为奖励)的那一天,你几乎被覆盖了。随着时间的推移,这已经发展成为最佳实践,你没有看到lambda
和filter
,例如,这些天通常在一般的python辩论中,因为列表推导使同样的事情变得更容易和更均匀。
答案 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