我正在根据他们在该地区获得的选票数来计算各政党在给定选举中每个地区赢得的席位数量。
R中有一个函数可以对每个区域执行此操作:
seats_ha(party, votes, seats, method="dhondt")
第一个参数提供了一个政党名单名称的向量,第二个参数提供了一个政党在一个地区中赢得的投票总数的向量,座位数=给定地区的座位数,该方法是所使用的选举公式将选票转换成席位。我能够做的是通过在选举年度中按单个区域单独对数据进行分组来计算此结果。我的问题是,在3个选举年中,我有〜27个地区。
所以我的数据如下:
year region dist_seat party_name party_vote reg_id cong_id
2016-2021 AMAZONAS 2 UPP 0 1 3
2016-2021 AMAZONAS 2 FP 51067 1 3
2016-2021 AMAZONAS 2 AP 11992 1 3
2016-2021 ANCASH 5 FE 4534 2 3
2016-2021 ANCASH 5 UPP 0 2 3
我希望能够每年在每个地区运行该功能。
答案 0 :(得分:1)
考虑by
,这是tapply
的面向对象的包装器,它按一列或多列对数据帧进行切片以运行所需的操作。 by的FUN
的输入参数始终是一个子集数据帧,输出始终是返回的任何函数的列表,这里是seat_ha
的返回。
您甚至可以将新列添加到子数据框,然后为单个数据框添加do.call
+ rbind
的结果。在tryCatch
下确保始终填充新列:seats_ha
和NA
的实际结果(如果遇到错误)。
BUILD LIST OF SUBSETTED DFs
df_list <- by(mydata, mydata[,c("year", "region")], FUN=function(sub) {
# ADD NEW COLUMN TO sub DF
sub$calc_seat <- tryCatch(with(sub, seats_ha(party_name, party_vote,
dist_seat, method="dhondt")),
error = function(e) NA)
return(sub)
})
# ROW BIND ALL DFs
final_df <- do.call(rbind, df_list)