2011-09-09 5 views
3

警告をグラフ化するために範囲に絶対値を変換します。まだ新しいR.はRで

に私はキャンペーンへの政治献金を示しRで一部のグラフ(具体的には、バブルチャート)を構築しようとしています。アイデアは、x軸に貢献度、y軸に貢献度、このレベルで貢献した円の面積を示します。

データは次のようになります。

CTRIB_NAML CTRIB_NAMF CTRIB_AMT FILER_ID 
John   Smith   $49   123456789 

FILER_IDフィールドは、特定の候補者のためのデータをフィルタリングするために使用されます。

私はこのデータフレームをバブルチャートに変換するために(herehereの助けを借りて)助けてくれました。

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

symbols(vals,counts, circles=sums, fg="white", bg="red", xlab="Amount of Contribution", ylab="Number of Contributions") 
text(vals, counts, sums, cex=0.75) 

ただし、この結果、x軸に間隔があまりにも長くなります。何百万もの記録があり、一部の候補者に分かれても圧倒的なデータ量が得られる可能性があります。絶対貢献度を範囲に変換するにはどうすればよいですか?たとえば、valsを範囲(0-10,11-20,21-30など)にグループ化するにはどうすればよいですか?

---- EDIT ----

以下のコメントは、私は数値にvalsを変換して、間隔にスライスが、私は戻って、バブルチャートの構文にすることを組み合わせて、その後どのようにわからないことができます。

new_vals <- as.numeric(as.character(sub("\\$","",vals))) 
new_vals <- cut(new_vals,100) 

しかしregraphing:

symbols(new_vals,counts, circles=sums) 

は無意味です - すべての値は、x軸上のゼロに並びます。

+5

。 – joran

答えて

1

値がcutの要素に含まれているので、tapplyを再度使用して、これらの新しいブレークを使用して数と合計を見つけることができます。たとえば:

counts = tapply(dfr$CTRIB_AMT, new_vals, length) 
sums = tapply(dfr$CTRIB_AMT, new_vals, sum) 

事のこのタイプのために、しかし、あなたはplyrggplot2パッケージは役に立ち見つけるかもしれません。ここでは、完全な再現性の例である:? `cut`を見てみ

require(ggplot2) 

# Options 
n = 1000 
breaks = 10 

# Generate data 
set.seed(12345) 
CTRIB_NAML = replicate(n, paste(letters[sample(10)], collapse='')) 
CTRIB_NAMF = replicate(n, paste(letters[sample(10)], collapse='')) 
CTRIB_AMT = paste('$', round(runif(n, 0, 100), 2), sep='') 
FILER_ID = replicate(10, paste(as.character((0:9)[sample(9)]), collapse=''))[sample(10, n, replace=T)] 

dfr = data.frame(CTRIB_NAML, CTRIB_NAMF, CTRIB_AMT, FILER_ID) 

# Format data 
dfr$CTRIB_AMT = as.numeric(sub('\\$', '', dfr$CTRIB_AMT)) 
dfr$CTRIB_AMT_cut = cut(dfr$CTRIB_AMT, breaks) 

# Summarize data for plotting 
plot_data = ddply(dfr, 'CTRIB_AMT_cut', function(x) data.frame(count=nrow(x), total=sum(x$CTRIB_AMT))) 

# Make plot 
dev.new(width=4, height=4) 
qplot(CTRIB_AMT_cut, count, data=plot_data, geom='point', size=total) + opts(axis.text.x=theme_text(angle=90, hjust=1)) 

enter image description here