在r group_by和dplyr中的循环中
我有以下数据框架,
my_df <- data.frame(Municipality=c('a', 'a', 'a', 'a', 'b', 'b', 'c','c','c','d','d'),
state=c('ac', 'ac', 'ac', 'ac', 'pb', 'pb', 'am','am','am','pi','pi'),
votes=c(541, 463, 246, 49, 2443, 2287, 1035,3530,9999,666,3809))
我想计算每个“市政当局”的投票份额以及每一个与州最高投票股有关的差异(“保证金胜利”)。我尝试了以下代码,
actual_df<-my_df %>%
group_by(Municipality,state) %>%
mutate(
share_vote = votes / sum(votes), # calculate vote shares
margin_victory = (max(share_vote)-(max( share_vote[share_vote!=max(share_vote)]))),
) %>%
ungroup()
此代码是按预期正确计算的共享投票。但是,只有当您有两个市政当局时,“保证金胜利”才是正确的。以下是我想尝试
desired_df <- data.frame(Municipality=c('a', 'a', 'a', 'a', 'b', 'b', 'c','c','c','d','d'),
state=c('ac', 'ac', 'ac', 'ac', 'pb', 'pb', 'am','am','am','pi','pi'),
votes=c(541, 463, 246, 49, 2443, 2287, 1035,3530,9999,666,3809),
margin_victory= c(0.06004619,-0.06004619,0.2270978, 0.3787529,
0.03298097,-0.03298097,
-0.6154902,-0.44417742,0.44417742,
-0.70234637,0.70234637))
用 margin_victory =(i in share_vote){max(share_vote)-share_vote}的“实际df”代码中的“保证金胜利”,
,但是没有成功。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您确定所需结果的迹象吗?如果没有,我会建议以下内容:
由
Are you sure about the signs of your desired result? If not, I would have suggested the following:
Created on 2022-06-17 by the reprex package (v2.0.1)