从dataframe中移除成对重复

从dataframe中移除成对重复

这似乎是一个简单的问题,但我似乎无法解决。如果两个列具有相同的值,则我希望从dataframe(Df)中删除重复项,即使这些值位于逆序..我的意思是,假设您有以下数据框架:


a <- c(rep("A", 3), rep("B", 3), rep("C",2))

b <- c('A','B','B','C','A','A','B','B')

df <-data.frame(a,b)


  a b

1 A A

2 A B

3 A B

4 B C

5 B A

6 B A

7 C B

8 C B

如果现在删除重复项,则会得到以下数据框架:


df[duplicated(df),]


  a b

3 A B

6 B A

8 C B

但是,我也想删除这个数据框架中的第6行,因为“A”、“B”与“B”、“A”相同。我怎么能自动做到这一点?


理想情况下,我可以指定要比较的两个列,因为数据帧可能有不同的列,而且可能相当大。


谢谢!


慕无忌1623718
浏览 800回答 3
3回答

慕标琳琳

的一种解决方案是首先对每一行进行排序。df:for (i in 1:nrow(df)){&nbsp; &nbsp; df[i, ] = sort(df[i, ])}dfa b1 A A2 A B3 A B4 B C5 A B6 A B7 B C8 B C在这一点上,只需要删除重复的元素:df = df[!duplicated(df),]df&nbsp; a b&nbsp;1 A A2 A B4 B C正如注释中提到的这封电子邮件一样,您的代码实际上是守住复制件。你需要用!duplicated移除它们。

POPMUISE

指定列以检查是否还有其他列:a <- c(rep("A", 3), rep("B", 3), rep("C",2))b <- c('A','B','B','C','A','A','B','B')df <-data.frame(a,b)df$c = sample(1:10,8)df$d = sample(LETTERS,8)df  a b  c d1 A A 10 B2 A B  8 S3 A B  7 J4 B C  3 Q5 B A  2 I6 B A  6 U7 C B  4 L8 C B  5 Vcols = c(1,2)newdf = df[,cols]for (i in 1:nrow(df)){    newdf[i, ] = sort(df[i,cols])}df[!duplicated(newdf),]  a b c d1 A A 8 X2 A B 7 L4 B C 2 P
打开App,查看更多内容
随时随地看视频慕课网APP