在R中查找每个唯一项目的最大值的出现次数

4

我将尝试用一些简单的方法使其运作。

假设有一个汽车销售的表格,其中包括汽车型号和汽车售价的名称。

例如:

    CarName     Price
    AcuraLegend 30000 
    AcuraTSX    40000 
    HondaCivic  20000 
    HondaCivic  22000 
    HondaCivic  22000 
    ToyotaCamry 18000

然后是另外2900个条目

我需要找到每辆汽车销售的最高价格以及以该最高金额销售的该类型汽车的数量。 因此,如果我们使用上面的数据框,假设整个数据框中支付给HondaCivic的最高价格为22000美元,并且仅有2辆汽车以这个价格出售,则对于HondaCivic,我将拥有:

CarName     MaxPricePaidForCar         NumberofCarsSoldforMaxPrice
HondaCivic      22000                  2 

现在,我已经用tapply和merge等方法将它们组合在一起,但这种方法相当繁琐。

如果有更简单的方法,请提供建议,将非常有帮助。


根据您的评论,我编辑了问题以更好地反映您的意思。如果我有什么错误,请随时回滚。 - joran
3个回答

6
为了对每一种独特类型的汽车进行操作,您可以在plyr包中使用ddply函数:
ddply(carList,.(carName), .fun = summarise, maxPrice = max(Price), 
                                            numCars = sum(Price == max(Price)))

3

这里有另一种使用 data.table 的方法。如果你的数据框很大而且速度很重要,那么这样做应该可以使速度提高约4倍。

library(data.table)
carT = data.table(carList)
carT[,list(maxPrice = max(Price), numCars = sum(Price == max(Price))),'carName']

我最近发现你在Stack Overflow上已经推广了相当长时间的data.table。谢谢! - Matt Dowle
感谢您编写这个包。我经常处理大量数据,一度考虑放弃R,直到我发现了data.table :) - Ramnath

1

对于这些小任务,我非常喜欢reshape包中的cast函数:

cast(df, CarName ~., c(function(x) sum(x == max(x)),max))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接