例如,我有一个数据框架,其中包含跨类别和子类别的数据,并且我希望能够在特定列等中获得具有最大值的行。
SQL是首先想到的。但是由于我对联接或索引等不感兴趣,因此使用更现代的语法,python的列表推导会做得更好。
R在此类操作中的最佳实践是什么?
编辑:
目前,我认为我对which.max
没问题。我之所以问这个问题,是因为我逐渐了解到R中有很多类似的库在做同样的事情。仅阅读文档,就很难评估其受欢迎程度(即图书馆实现其目标的程度)。我在Python上的个人经验是,当您弄清楚如何使用列表推导(使用itertools
作为奖励)的那一天,您的工作就差不多了。随着时间的流逝,这已成为最佳实践,例如,如今在一般的python辩论中,您通常看不到lambda
和filter
,因为列表理解功能使同一件事变得更加容易和统一。
最佳答案
一些其他上下文可能会有所帮助,但是从听起来来看,您可能正在寻找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