根据应用于2个非数字列的+ b逻辑删除重复项

时间:2017-08-02 18:51:23

标签: r

这可能是无法知道要搜索的正确关键字,但我正在寻找一种方法,根据两个非数字列之间的顺序撤销来删除重复项。这是我数据的一小部分:

ANIMAL1<-c("20074674_K.v1","20085105_K.v1","20085638_K.v1","20085646_K.v1")
ANIMAL2<-c("20085105_K.v1","20074674_K.v1","20074674_K.v1","20074674_K.v1")
exclusions<-c(13,13,5,10)
data<-data.frame(ANIMAL1,ANIMAL2,exclusions)
 ANIMAL1 ANIMAL2 exclusions
1 20074674_K.v1 20085105_K.v1 13
2 20085105_K.v1 20074674_K.v1 13
3 20085638_K.v1 20074674_K.v1 5
4 20085646_K.v1 20074674_K.v1 10

第一行和第二行是重复比较,动物的顺序在前两列之间反转。删除哪一个并不重要,但我想删除其中一个副本...以及在我的较大数据帧中符合此逻辑的所有其余重复项。我过去常常根据这些问题中的逻辑进行子集化:Remove duplicate column pairs, sort rows based on 2 columns以及其他发布搜索的帖子&#34;根据2列删除重复项&#34;但我还没有找到任何与我的用例相近的东西。以下是我希望删除重复后数据的样子:

 ANIMAL1 ANIMAL2 exclusions
1 20085105_K.v1 20074674_K.v1 13
2 20085638_K.v1 20074674_K.v1 5
3 20085646_K.v1 20074674_K.v1 10    

非常感谢!

1 个答案:

答案 0 :(得分:1)

data[duplicated(t(apply(data,1,sort))) == FALSE,]
  1. 按行排序,以便我在每行的每个行的组合ANIMAL1ANIMAL2相同,如果它们位于不同的列中。排除也是排序的,但在这种情况下,您不必这样做。
  2. 当按行排序时,数据需要作为原始数据集转换回列
  3. 标记行重复并将其删除。