【发布时间】:2021-05-13 23:10:10
【问题描述】:
我有一个包含许多重复行的大型数据集。我想删除重复的行并只保留唯一的行。但是我不想保留第一个重复的行,dplyr::distinct() 就是这种情况。我想要的是,例如,如果有三行具有相似的答案,我希望 r 随机保留其中一个(并不总是第一个重复的行)。
例如,如果我的数据框如下所示:
ID<-c(1:10)
age<-c(18,18,19,19,19,20,20,20,21,21)
Answer1<-c("yes", "yes", "no", "no", "no", "no", "no", "yes", "no", "no")
Answer2<-c("yes", "yes", "no", "no", "no", "no", "no", "yes", "yes", "no")
df<-data.frame(ID, age, Answer1, Answer2)
print(df)
ID age Answer1 Answer2
1 18 yes yes
2 18 yes yes
3 19 no no
4 19 no no
5 19 no no
6 20 no no
7 20 no no
8 20 yes yes
9 21 no yes
10 21 no no
那些年龄相同的人加上第一个和第二个答案匹配的人,我认为他们是重复的,我想随机保留其中一个(并删除其余的)。我尝试了以下dplyr 命令。问题是该命令保留了第一个重复的行。
df.new<-df%>%
group_by(age) %>%
distinct(Answer1, Answer2,.keep_all = TRUE)
是否有一个简单的命令可以随机保留重复的行之一?
如果这不可能,您知道我如何创建额外的列来指示个人是唯一的还是重复的(类似这样)
ID age Answer1 Answer2 Status
1 18 yes yes duplicate
2 18 yes yes duplicate
3 19 no no duplicate
4 19 no no duplicate
5 19 no no duplicate
6 20 no no duplicate
7 20 no no duplicate
8 20 yes yes unique
9 21 no yes unique
10 21 no no unique
请注意,如果数据集中至少有一个年龄相似的人,Answer1 和 Answer2,则此人会获得重复状态。
【问题讨论】:
标签: r dataframe dplyr duplicates aggregate