如何删除重复项并替换列变量

时间:2019-05-28 15:53:28

标签: r statistics

我正在使用名为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 个答案:

答案 0 :(得分:1)

为重复记录创建标志

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 :(得分:0)

使用dplyr的一种方法是group_by除聚会以外的所有字段,然后如果组中的行数大于summarise到“ CrossListed” 1,即n()>1

像这样...

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

或最后一行的替代方法是将所有聚会名称粘贴在一起,以便您可以看到交叉列出的位置(如果有很多聚会,这可能会有用-如果只有两个聚会,则更少! )... summarise(Party = paste(sort(Party), collapse=", "))