R中一列中两个较高数字之间的差异

Difference between two higher numbers in a column in R

我有一个这样的数据框:

  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

这是巴西的 data.frame 选举。按 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))

您可以按 Share 排列数据框,然后 slice 前两个值。然后您可以使用 summarise 来获取每个组的值之间的差异:

library(dplyr)
df %>%
    group_by(NUM_TURNO, CODIGO_MUNICIPIO) %>%
    arrange(desc(Share)) %>%
    slice(1:2) %>%
    summarise(Diff = -diff(Share))

您还可以使用 dplyr 中的 top_n 进行分组和汇总。请记住,在您提供的数据中,如果您将 diff 与单个值一起使用,则会在 summarize 中出现错误,因此使用 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