为了账号安全,请及时绑定邮箱和手机立即绑定

从dataframe中移除成对重复

从dataframe中移除成对重复

梦里花落0921 2019-11-06 09:05:39
从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 b1 A A2 A B3 A B4 B C5 B A6 B A7 C B8 C B如果现在删除重复项,则会得到以下数据框架:df[duplicated(df),]  a b3 A B6 B A8 C B但是,我也想删除这个数据框架中的第6行,因为“A”、“B”与“B”、“A”相同。我怎么能自动做到这一点?理想情况下,我可以指定要比较的两个列,因为数据帧可能有不同的列,而且可能相当大。谢谢!
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

一种解决方案是首先对每一行进行排序。df:


for (i in 1:nrow(df))

{

    df[i, ] = sort(df[i, ])

}

df


a b

1 A A

2 A B

3 A B

4 B C

5 A B

6 A B

7 B C

8 B C

在这一点上,只需要删除重复的元素:


df = df[!duplicated(df),]

df

  a b 

1 A A

2 A B

4 B C

正如注释中提到的这封电子邮件一样,您的代码实际上是守住复制件。你需要用!duplicated移除它们。



查看完整回答
反对 回复 2019-11-07
?
白衣非少年

TA贡献1155条经验 获得超0个赞

指定列以检查是否还有其他列:


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 d

1 A A 10 B

2 A B  8 S

3 A B  7 J

4 B C  3 Q

5 B A  2 I

6 B A  6 U

7 C B  4 L

8 C B  5 V


cols = c(1,2)

newdf = df[,cols]

for (i in 1:nrow(df)){

    newdf[i, ] = sort(df[i,cols])

}


df[!duplicated(newdf),]

  a b c d

1 A A 8 X

2 A B 7 L

4 B C 2 P



查看完整回答
反对 回复 2019-11-07
  • 3 回答
  • 0 关注
  • 494 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信