簡體   English   中英

如何對某些觀察結果運行函數?

[英]How to run a function over certain observations?

我正在嘗試根據政黨在該地區所獲得的選票數來計算每個政黨在給定選舉中贏得的席位數。

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

我希望能夠每年在每個地區運行該功能。

考慮by ,使用面向對象的包裝器來tapply ,從而按一列或多列對數據幀進行切片以運行所需的操作。 by的FUN的輸入參數始終是一個子集數據幀,輸出始終是所有函數返回的列表,這里是seat_ha的返回。

您甚至可以將新列添加到子數據框,然后對單個數據框執行do.call + rbind結果。 tryCatch下面,確保始終填充新列: seats_haNA實際結果(如果遇到錯誤)。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM