0

これは初心者の質問ですが、Stata から来ると、これは私には奇妙にトリッキーに思えます。ヒントをいただければ幸いです。

変数district_id、year、party、およびvotesを持つデータフレームがあります。1 年間の地区ごとの政党ごとの票 (= 各行) を、今年のその政党の投票の合計 (= ここではブロックで表示) で割りたいと思います。年に一度のパーティー?

構造は

 district_i year    party   votes

  1 2001    party1   24
  2 2001    party1   56
  3 2001    party1   12

  1 2002    party1   40
  2 2002    party1   749
  3 2002    party1   26

  1 2001    party2   34
  2 2001    party2   48
  3 2001    party2   23

  1 2002    party2   34
  2 2002    party2   48
  3 2002    party2   98

各党/地区/年グループの小計を作成しました

agg <- aggregate(df$votes, list(df$party, df$year), FUN="sum")

しかし、データフレーム内のセルを agg に格納された結果で割るにはどうすればよいですか? 最後に、パーセンテージを含む新しい列が必要です。

egen .. by:( Stataのように) もっと簡単な方法はありませんか?

4

2 に答える 2

0

このような?

DF <- read.table(text="district_i year    party   votes
  1 2001    party1   24
  2 2001    party1   56
  3 2001    party1   12
  1 2002    party1   40
  2 2002    party1   749
  3 2002    party1   26
  1 2001    party2   34
  2 2001    party2   48
  3 2001    party2   23
  1 2002    party2   34
  2 2002    party2   48
  3 2002    party2   98", header=TRUE)

library(plyr)
ddply(DF, .(year,party), transform, contrib = votes / sum(votes))

#    district_i year  party votes    contrib
# 1           1 2001 party1    24 0.26086957
# 2           2 2001 party1    56 0.60869565
# 3           3 2001 party1    12 0.13043478
# 4           1 2001 party2    34 0.32380952
# 5           2 2001 party2    48 0.45714286
# 6           3 2001 party2    23 0.21904762
# 7           1 2002 party1    40 0.04907975
# 8           2 2002 party1   749 0.91901840
# 9           3 2002 party1    26 0.03190184
# 10          1 2002 party2    34 0.18888889
# 11          2 2002 party2    48 0.26666667
# 12          3 2002 party2    98 0.54444444
于 2013-07-04T17:54:40.787 に答える
0

これを試して:

transform(df, percent = 100 * ave(votes, year, party, FUN = prop.table))
于 2013-07-04T18:12:27.737 に答える