Отбрасывание строк по условию - PullRequest
1 голос
/ 27 января 2020

Я работаю над базой данных о местных выборах в Бразилии, и теперь мне нужно отбросить строки, содержащие более одного кандидата, ВЫБРАННОГО муниципалитетом. Мои данные выглядят так:

>df
Candidate     Municipality      Situation 
Rose               A            ELECTED
Mark               A            NON-ELECTED
Linda              A            ELECTED
Jhon               A            NON-ELECTED
James              B            ELECTED
Phillip            B            NON-ELECTED
Bruce              B            NON-ELECTED

В случае, показанном выше, избранному кандидату в муниципалитете А был отменен его мандат, поэтому у нас были еще одни выборы.

Итак, я ищу процедуру, которая автоматически удаляет любой случай, подобный этому, в моих данных. Вывод, который я желаю в этом случае, выглядит следующим образом:

>df
    Candidate     Municipality      Situation 
    James              B            ELECTED
    Phillip            B            NON-ELECTED
    Bruce              B            NON-ELECTED

С уважением,

1 Ответ

1 голос
/ 27 января 2020

Вот один из вариантов после группировки по «Муниципалитету», отметьте sum логического вектора (Situation == "ELECTED"), чтобы получить 1

library(dplyr)
df %>%
  group_by(Municipality) %>%
  filter(sum(Situation == "ELECTED") == 1)
# A tibble: 3 x 3
# Groups:   Municipality [1]
#  Candidate Municipality Situation  
#  <chr>     <chr>        <chr>      
#1 James     B            ELECTED    
#2 Phillip   B            NON-ELECTED
#3 Bruce     B            NON-ELECTED

Другой вариант - n_distinct

df %>%
  group_by(Municipality) %>%
  filter(n_distinct(Candidate[Situation == "ELECTED"]) == 1)

In base R,

subset(df, ave(Situation == "ELECTED", Municipality, FUN = sum) == 1)
#   Candidate Municipality   Situation
#5     James            B     ELECTED
#6   Phillip            B NON-ELECTED
#7     Bruce            B NON-ELECTED

data

df <- structure(list(Candidate = c("Rose", "Mark", "Linda", "Jhon", 
"James", "Phillip", "Bruce"), Municipality = c("A", "A", "A", 
"A", "B", "B", "B"), Situation = c("ELECTED", "NON-ELECTED", 
"ELECTED", "NON-ELECTED", "ELECTED", "NON-ELECTED", "NON-ELECTED"
)), class = "data.frame", row.names = c(NA, -7L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...