我正在玩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轴)的出现次数?并将这些捐赠的总和(这是轴的衍生物)加起来?或者我是否需要创建一个迭代数据并分别编译这些数字的函数?或者以某种方式预处理数据?
答案 0 :(得分:3)
将ggplot2
包与geom_point
一起使用时,这很容易。
使用ggplot
的众多好处之一是内置统计信息意味着您无需预先汇总数据。 <{1}}与geom_point
结合使用即可。
以下是stat_sum
的示例。 (请注意,?geom_point
是一个带有mtcars
的内置数据集。)
有关详细信息,请参阅the ggplot website和geom_point。
ggplot2
答案 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)
我确信存在更优雅的解决方案。