Как я могу заменить факторные уровни верхними n уровнями (по некоторой метрике) плюс [другой]?

Для фактора с более чем разумным количеством уровней для раскрашивания на графике я хочу заменить любые уровни, не входящие в «10 лучших», на «другие» '.

Альтернативный вопрос: Как уменьшить уровни фактора до числа, которое rcolorbrewer может отобразить как отдельные цвета?

Например, если я хочу изобразить количество хоумранов за десятилетие по бейсбольным данным:

require(ggplot2)
qplot(data=baseball,10*year%/%10,hr,
  stat="identity",geom="bar")

simple graph to set the scene

Возможно, мне хотелось бы увидеть, какие команды внесли свой вклад в это:

qplot(data=baseball,10*year%/%10,hr,
  fill=team,
  stat="identity",geom="bar")

too many teams to tell colors apart or plot on page

Это создает слишком много уровней цвета! Цвета настолько похожи, что их невозможно различить, и их так много, что они не помещаются на экране.

Мне бы очень хотелось увидеть топ-X (7) команд (по общему количеству хоумранов) и затем все остальные сгруппированы в одну категорию / цвет под названием «другое».

Давайте представим, что у нас есть функция с именем hotfactor , которая знает, как это сделать:

hotfactor(afactor,orderby,count)={ ??? }

qplot(data=baseball,10*year%/%10,hr,
  fill=hotfactor(factor(team),hr,n=7),
  stat="identity",geom="bar") + 
  scale_fill_brewer("team","Dark2")

sample image for solution

Итак, что я могу использовать для 'hotfactor'?

9
задан Alex Brown 15 July 2011 в 17:59
поделиться