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

SQL是首先想到的。但是由于我对联接或索引等不感兴趣,因此使用更现代的语法,python的列表推导会做得更好。

R在此类操作中的最佳实践是什么?

编辑:
目前,我认为我对which.max没问题。我之所以问这个问题,是因为我逐渐了解到R中有很多类似的库在做同样的事情。仅阅读文档,就很难评估其受欢迎程度(即图书馆实现其目标的程度)。我在Python上的个人经验是,当您弄清楚如何使用列表推导(使用itertools作为奖励)的那一天,您的工作就差不多了。随着时间的流逝,这已成为最佳实践,例如,如今在一般的python辩论中,您通常看不到lambdafilter,因为列表理解功能使同一件事变得更加容易和统一。

最佳答案

一些其他上下文可能会有所帮助,但是从听起来来看,您可能正在寻找which.max()或相关功能。对于分组操作,我默认使用plyr系列函数,但是,如果速度是最重要的,那么在base 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

07-24 09:52
查看更多