这是一个初学者的问题,但是来自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:
)?
答案 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))