通过R中的数据帧的小计来划分单元格

时间:2013-07-04 17:44:41

标签: r dataframe aggregate subset

这是一个初学者的问题,但是来自Stata这对我来说似乎很奇怪。我会很感激任何提示。

我有一个包含变量district_id,year,party和votes的数据框。我想将每个地区每个地区每年的选票(=每一行)除以该党在今年的投票总数(=这里显示为街区)。所以,一个地区对所收到的总票数有多少百分比?一年中的一方?

结构是

 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中存储的结果来划分数据帧中的单元格? 最后,我希望有一个新的百分比列。

是否有更简单的方法(如Stata中的egen .. by:)?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

试试这个:

transform(df, percent = 100 * ave(votes, year, party, FUN = prop.table))