2011-09-07 96 views
0

我與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

您可以在這裏使用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) 

我敢肯定,更優雅有解決方案。

+0

也許我應該將其添加爲一個單獨的問題,但是我應該如何CTRIB_AMT列轉換爲數字列,所以'sums'和'counts'可以正確計算。我嘗試了'as.numeric(as.character(sub(「$」,'',contribs $ CTRIB_AMT)))'from [here](http://stackoverflow.com/questions/7299991/how-cani-i- convert-a-factor-column-that-c​​ontains-decimal-numbers-to-numeric)但沒有起作用。有什麼想法嗎? – tchaymore

+0

它應該非常接近。你有什麼問題? –

+1

哦,我明白了,你需要:'as.numeric(as.character(sub(「$」,「」,contribs $ CTRIB_AMT,fixed = TRUE)))''因爲'$'是正則表達式中的特殊字符見'?sub') –

3

當您使用ggplot2包與geom_point時,這很容易。

使用ggplot的好處之一是內置的統計數據意味着您不必預先總結數據。 geom_point結合stat_sum是你所需要的。

以下是?geom_point的示例。 (注意:mtcars是一個內置的數據集ggplot2。)

更多細節見the ggplot websitegeom_point

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

enter image description here