我有一个像这样的数据框:
NUM_TURNO CODIGO_MUNICIPIO SIGLA_PARTIDO SHARE
1 1 81825 PPB 38.713318
2 1 81825 PMDB 61.286682
3 1 09717 PMDB 48.025900
4 1 09717 PL 1.279217
5 1 09717 PFL 50.694883
6 1 61921 PMDB 51.793868
这是巴西选举的数据框架。我想按NUM_TURNO和CODGIDO_MUNICIPIO进行分组,我想比较每个城市和每个城市(第1或第2个)中投票最多的第一和第二大政治机构的份额,并创建一个新列。
我有什么问题要做?我不知道如何仅针对两个最大的投票份额计算差异。
例如,对于第一种情况,我想创建某种东西,使我可以区别61.286682和38.713318 = 22.573364,等等。
类似这样的东西:
df %>%
group_by(NUM_TURNO, CODIGO_MUNICIPIO) %>%
mutate(Diff = HIGHER SHARE - 2º HIGHER SHARE))
答案 0 :(得分:2)
您还可以将top_n
中的dplyr
用于分组和汇总。请记住,在您提供的数据中,如果您将summarize
与单个值一起使用,则使用diff
会导致ifelse
的错误。
df %>%
group_by(NUM_TURNO, CODIGO_MUNICIPIO) %>%
top_n(2, SHARE) %>%
summarize(Diff = ifelse(n() == 1, NA, diff(SHARE)))
# A tibble: 3 x 3
# Groups: NUM_TURNO [?]
NUM_TURNO CODIGO_MUNICIPIO Diff
<dbl> <dbl> <dbl>
1 1 9717 2.67
2 1 61921 NA
3 1 81825 22.6
答案 1 :(得分:1)
您可以按Share
,然后按slice
的前两个值排列数据框。然后,您可以使用summarise
来获取每个组的值之间的差异:
library(dplyr)
df %>%
group_by(NUM_TURNO, CODIGO_MUNICIPIO) %>%
arrange(desc(Share)) %>%
slice(1:2) %>%
summarise(Diff = -diff(Share))