【问题标题】:Bubble Chart in R with # of Occurrences / Sums of ValuesR中的气泡图,出现次数/值总和
【发布时间】:2011-11-11 21:14:06
【问题描述】:

我正在使用 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 轴)?并将这些捐赠的总和加起来(这是轴的导数)?或者我是否需要创建一个函数来遍历数据并分别编译这些数字?或者以某种方式预处理数据?

【问题讨论】:

    标签: r


    【解决方案1】:

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

    使用ggplot 的众多好处之一是内置统计数据意味着您不必预先汇总数据。 geom_pointstat_sum 结合使用即可。

    这是来自?geom_point 的示例。 (请注意,mtcars 是带有ggplot2 的内置数据集。)

    请参阅the ggplot websitegeom_point 了解更多详情。

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

    【讨论】:

      【解决方案2】:

      您可以在此处使用 plyr 包中的 ddply。如果您的原始 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)
      

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

      【讨论】:

      • 也许我应该将此作为一个单独的问题添加,但是我应该如何将 CTRIB_AMT 列转换为数字列,以便 sumscounts 可以正确计算。我从here 尝试了as.numeric(as.character(sub("$",'',contribs$CTRIB_AMT))),但这没有用。有什么想法吗?
      • 应该非常接近。你遇到了什么问题?
      • 哦,我明白了,你需要:as.numeric(as.character(sub("$","",contribs$CTRIB_AMT, fixed=TRUE))),因为$ 是正则表达式中的特殊字符(请参阅?sub
      • 太棒了。这取代了“$”字符,但该列仍然是一个因子而不是数字列。我必须继续努力,但如果你有任何想法......
      • 叹息。 contribs$CTRIB_AMT&lt;-as.numeric(as.character(sub("$","",contribs$CTRIB_AMT, fixed=TRUE)))。希望对你有用。
      猜你喜欢
      • 1970-01-01
      • 2015-11-09
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 2016-02-13
      相关资源
      最近更新 更多