我正在使用名为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”变量。
答案 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=", "))