首页 > 解决方案 > 从数据框中删除所有包含相同元素的行,即使元素在 R 中的顺序不同

问题描述

这是我的数据:

mymat <- structure(c(3, 6, 9, 9, 1, 4, 1, 5, 9, 6, 6, 4, 1, 4), .Dim = c(7L, 2L))

有些行是重复的,其他几行包含相同的元素,尽管它们的顺序不同。我希望删除所有包含相同元素的行,无论这些元素是相同的(重复的行)还是不同的顺序。这将只保留c(3, 5).

我在这里这里检查了以前的问题。但是,我的要求是删除所有这些行,而不是留下一个这样的行。

我的问题也与删除所有重复行的问题不同,因为我不仅要查找重复的行,还要查找包含相同元素集但排序不同的行。例如, rowsc(6, 9)c(9, 6)都应该被删除,因为它们都包含相同的元素集。

我寻找不使用 for 循环的解决方案,因为我的真实数据很大并且 for 循环可能很慢。

注意:我的完整数据有 40k 行和 2 列。

标签: rdplyrcombinations

解决方案


您可以按行对数据进行排序并使用duplicated-

tmp <- t(apply(mymat, 1, sort))
tmp[!(duplicated(tmp) | duplicated(tmp, fromLast = TRUE)), , drop = FALSE]

#     [,1] [,2]
#[1,]    3    5

推荐阅读