Как удалить дубликаты и заменить переменные столбца - PullRequest
0 голосов
/ 28 мая 2019

Я работаю с набором данных с именем 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), ], который преуспел в удаленииповторяющиеся кандидаты, но теперь я не уверен, как бы я вернулся и отредактировал переменную "Party".

Ответы [ 2 ]

1 голос
/ 28 мая 2019

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

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
0 голосов
/ 28 мая 2019

Одним из способов использования 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=", "))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...