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

Posted

技术标签:

【中文标题】根据应用于 2 个非数字列的 a+b 逻辑删除重复项【英文标题】:remove duplicates based on a+b logic applied to 2 non-numeric columns 【发布时间】:2017-08-02 18:51:23 【问题描述】:

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

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 和其他搜索“基于 2 列删除重复项”的帖子,但我还没有找到任何与我的用例相近的东西。以下是我希望我的数据在删除重复后的样子:

 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】:
data[duplicated(t(apply(data,1,sort))) == FALSE,]
    按每一行排序,这样如果ANIMAL1ANIMAL2 位于不同的列中,每行的每行组合相同。排除项也已排序,但在这种情况下您不必这样做。 按行排序时,需要将数据转回列作为原始数据集 标记行重复并将其删除。

【讨论】:

介意你解释一下你的答案吗? 我认为这行得通,只是将它们组合在一起,基本上... 1. 按每一行排序,这样如果每行的 ANIMAL1 或 ANIMAL2 在不同的列中,我就可以使它们在每一行中的组合相同, 排除项也进行了排序,但在这种情况下您不必这样做。 2. 按行排序时,需要将数据转回列作为原始数据集 3. 标记行重复并将其剔除。不确定这是否是您正在寻找的...

以上是关于根据应用于 2 个非数字列的 a+b 逻辑删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

根据另一列的值过滤数据框列[重复]

python pandas:删除A列的重复项,保留B列中具有最高值的行

根据其他列熊猫求和并保存列的值[重复]

awk 根据两列和自定义重复规则删除重复项

如何根据列的值对观察值重新编号[重复]

如果存在于列表中,则根据另一列的值选择列