Пузырьковая диаграмма в R с количеством вхождений / сумм значений - PullRequest
0 голосов
/ 07 сентября 2011

Я играю с рисованием пузырьковых диаграмм в R - текущий проект состоит в том, чтобы построить график пузырьковых политических пожертвований со следующими характеристиками:

x-axis: size of donation, in ranges i.e. $10-$19, $20-29, $30-49, etc.
y-axis: number of donations of that amount
area of bubble: total amount of donations 

Я не планирую ничего сложного, просто что-то вроде:

symbols(amount_ranges,amount_occurrences, circles=sums)

Данные довольно гранулированы, поэтому для каждого пожертвования есть отдельная запись, и их нужно суммировать, чтобы получить нужные мне значения.

Например, данные выглядят так (лишние столбцы удалены):

CTRIB_NAML    CTRIB_NAMF    CTRIB_AMT    FILER_ID
John          Smith         $49          123456789

Это не так сложно, но есть простой способ в R подсчитать количество вхождений определенного значения(для оси у)?И сложить сумму этих пожертвований (которая является производной от осей)?Или мне нужно создать функцию, которая перебирает данные и компилирует эти числа отдельно?Или как-то предварительно обработать данные?

Ответы [ 2 ]

3 голосов
/ 07 сентября 2011

Это просто, когда вы используете пакет ggplot2 с geom_point.

Одним из многих преимуществ использования ggplot является то, что встроенная статистика означает, что вам не нужно предварительнообобщить ваши данные.geom_point в сочетании с stat_sum - это все, что вам нужно.

Вот пример из ?geom_point.(Обратите внимание, что mtcars - это встроенный набор данных с ggplot2.)

Подробнее см. на сайте ggplot и geom_point .

library(ggplot2)
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(size = qsec))

enter image description here

2 голосов
/ 07 сентября 2011

Вы можете использовать ddply из пакета plyr здесь. Если ваш оригинальный data.frame назывался dfr, то что-то близкое к этому должно работать:

result<-ddply(dfr, .(CTRIB_AMT), function(partialdfr){data.frame(amt=partialdfr$CTRIB_AMT[1], sm=sum(partialdfr$CTRIB_AMT), mn=mean(partialdfr$CTRIB_AMT)) })

На самом деле, решение base R также довольно просто:

vals<-sort(unique(dfr$CTRIB_AMT))
sums<-tapply( dfr$CTRIB_AMT, dfr$CTRIB_AMT, sum)
counts<-tapply( dfr$CTRIB_AMT, dfr$CTRIB_AMT, length)

Я уверен, что существуют более элегантные решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...