Найти количество вхождений для максимального значения для каждого уникального элемента в R - PullRequest
4 голосов
/ 19 августа 2011

Я пытаюсь заставить это работать каким-то простым способом.

Скажем, есть таблица для проданных автомобилей с указанием модели автомобиля и цены, по которой автомобиль был продан за

Например.,

    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, слияния и т. Д. И т. Д.

Любые предложения по более простому методу были бы очень полезны,

Ответы [ 3 ]

6 голосов
/ 19 августа 2011

Чтобы сделать это для каждого уникального типа автомобиля, вы можете использовать ddply в пакете plyr:

ddply(carList,.(carName), .fun = summarise, maxPrice = max(Price), 
                                            numCars = sum(Price == max(Price)))
3 голосов
/ 19 августа 2011

Вот еще один подход, использующий data.table. Если ваш фрейм данных большой и скорость вызывает беспокойство, это должно дать вам примерно 4-кратное ускорение.

library(data.table)
carT = data.table(carList)
carT[,list(maxPrice = max(Price), numCars = sum(Price == max(Price))),'carName']
1 голос
/ 19 августа 2011

Мне очень нравится cast из пакета reshape для этих маленьких задач:

cast(df, CarName ~., c(function(x) sum(x == max(x)),max))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...