R中的气泡图,其中包含出现次数/值的总和

时间:2011-09-07 06:30:15

标签: r

我正在玩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中是否有一种简单的方法来计算某个值(对于y轴)的出现次数?并将这些捐赠的总和(这是轴的衍生物)加起来?或者我是否需要创建一个迭代数据并分别编译这些数字的函数?或者以某种方式预处理数据?

2 个答案:

答案 0 :(得分:3)

ggplot2包与geom_point一起使用时,这很容易。

使用ggplot的众多好处之一是内置统计信息意味着您无需预先汇总数据。 <{1}}与geom_point结合使用即可。

以下是stat_sum的示例。 (请注意,?geom_point是一个带有mtcars的内置数据集。)

有关详细信息,请参阅the ggplot websitegeom_point

ggplot2

enter image description here

答案 1 :(得分:2)

您可以在此处使用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)) })

事实上,基础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)

我确信存在更优雅的解决方案。