首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从dataframe中删除包含相同元素的所有行,即使元素在R中的顺序不同

从dataframe中删除包含相同元素的所有行,即使元素在R中的顺序不同
EN

Stack Overflow用户
提问于 2021-09-24 12:36:35
回答 4查看 145关注 0票数 0

这是我的数据:

代码语言:javascript
复制
mymat <- structure(c(3, 6, 9, 9, 1, 4, 1, 5, 9, 6, 6, 4, 1, 4), .Dim = c(7L, 2L))

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

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

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

我寻找不使用for循环的解决方案,因为我的实际数据很大,而for循环可能比较慢。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-09-24 12:57:26

我添加了一些数据,以表明矩阵格式仍然是

代码语言:javascript
复制
mymat <- structure(c(3, 6, 9, 9, 1, 4, 1, 10, 12, 13, 14, 5, 9, 6, 6, 4, 1, 4, 11, 13, 12, 15), .Dim = c(11L, 2L))

dup <- duplicated(rbind(mymat, mymat[, c(2, 1)]))
dup_fromLast <- duplicated(rbind(mymat, mymat[, c(2, 1)]), fromLast = TRUE)

mymat_duprm <- mymat[!(dup_fromLast | dup)[1:(length(dup) / 2)], ]

mymat_duprm
票数 1
EN

Stack Overflow用户

发布于 2021-09-24 13:24:00

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

代码语言:javascript
复制
tmp <- t(apply(mymat, 1, sort))
tmp[!(duplicated(tmp) | duplicated(tmp, fromLast = TRUE)), , drop = FALSE]

#     [,1] [,2]
#[1,]    3    5
票数 2
EN

Stack Overflow用户

发布于 2021-09-24 12:58:30

作为一个矩阵:

代码语言:javascript
复制
tmp <- apply(mymat, 1, function(z) toString(sort(z)))
mymat[ave(tmp, tmp, FUN = length) == "1",, drop = FALSE]
#      [,1] [,2]
# [1,]    3    5

之所以需要drop=FALSE,仅仅是因为(至少使用此示例数据)过滤结果在一行中。虽然我怀疑您的实际数据( 40k行)是否会减少到这个值,但我还是建议您将其保存在那里(“以防万一”,这只是防御性编程)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69315138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档