我试图通过一些简单的方法来实现这一点。
说,有一个售卖汽车的表格,以及汽车模型的名称和汽车的售价
例如,
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等等。
对更简单方法的任何建议都会非常有用,
答案 0 :(得分:6)
要为每种独特类型的汽车执行此操作,您可以在ddply
包中使用plyr
:
ddply(carList,.(carName), .fun = summarise, maxPrice = max(Price),
numCars = sum(Price == max(Price)))
答案 1 :(得分:3)
以下是使用data.table
的另一种方法。如果您的数据框很大并且速度很快,那么这应该可以为您提供大约4倍的加速。
library(data.table)
carT = data.table(carList)
carT[,list(maxPrice = max(Price), numCars = sum(Price == max(Price))),'carName']
答案 2 :(得分:1)
对于这些小任务,我非常喜欢cast
包中的reshape
:
cast(df, CarName ~., c(function(x) sum(x == max(x)),max))