Я работаю с набором данных с именем CCCrn о кандидатах на местных выборах с некоторыми дублирующими значениями. Вот пример:

Adam Hill         4100 New Texas Rd.            Pittsburgh 15239 School Director   PLUM       Democratic     4          5

Adam Hill         4100 New Texas Rd.            Pittsburgh 15239 School Director   PLUM       Republican     4          5

Как видите, этот кандидат внесен в списки и был в избирательных бюллетенях обеих партий. Я хотел бы удалить одну из строк, а затем отредактировать переменную Party, указав «Перекрестный список.

Очевидно, что уникальные и особенные не очень помогли. Я попытался test <- CCCrn[!duplicated(CCCrn$Name), ], которому удалось удалить дубликаты кандидатов, но теперь я не уверен, как бы я вернулся и отредактировал переменную "Сторона".

0
Chloe Shearer 28 Май 2019 в 18:53

2 ответа

Лучший ответ

Создать флаг для дублирующейся записи

df <- df %>% mutate(dup = ifelse(duplicated(name)|duplicated(name, fromLast=TRUE),1,0))
df <- df[!duplicated(df$name),]   ## remove duplicate

df <- df %>% mutate(party= ifelse(dup==1, "Cross Listed", party)) # update party

df <- df%>% select(-dup)  ## remove flag
1
Gsingh 28 Май 2019 в 16:13

Один из способов, используя dplyr, состоит в том, чтобы group_by заполнить все поля, кроме партии, а затем summarise в «Перекрестный список», если количество строк в группе больше 1, т.е. если n()>1.

Что-то вроде этого...

library(dplyr)
df2 <- df %>% group_by(-Party) %>%
      summarise(Party = ifelse(n() > 1, "CrossListed", first(Party))

Или альтернативой последней строке будет вставка всех названий партий вместе, чтобы вы могли видеть, где они находятся в перекрестном списке (что может быть полезно, если партий много - меньше, если их только две!) .. . summarise(Party = paste(sort(Party), collapse=", "))

0
Andrew Gustar 28 Май 2019 в 16:03