【发布时间】:2014-09-30 04:15:43
【问题描述】:
我有一对。每对都表示为[i,1:2]。也就是说,ith 对是ith 行中第一列和第二列中的数字。
我需要将这些对分成不同的组,s.t.在jth 组中的任何对中没有任何元素在任何非j 的组中。例如:
示例 1:数据
> col1 <- c(3, 4, 6, 7, 10, 8)
> col2 <- c(6, 7, 3, 4, 3, 1)
>
> dat <- cbind(col1, col2)
> rownames(dat) <- 1:nrow(dat)
>
> dat
col1 col2
1 3 6
2 4 7
3 6 3
4 7 4
5 10 3
6 8 1
对于所有对,无论数字是在第 1 列还是第 2 列,都应该将这些对分类为组 s.t.每个组中的每一对中的每个数字只存在于一个组中。所以解决的例子应该是这样的。
col1 col2 groups
1 3 6 1
2 4 7 2
3 6 3 1
4 7 4 2
5 10 3 1
6 8 1 3
第 1、3 和 5 行被组合在一起,因为 1 和 3 包含相同的数字,并且 5 共享数字 3,所以它必须与它们组合在一起。 2 和 4 共享相同的不同数字,因此它们被组合在一起,而 6 具有唯一的数字,因此它被单独留下。
如果我们稍微改变数据,请注意以下几点。
示例 2:新数据
注意当我们添加一行与第 6 行和第 5 行共享一个元素时会发生什么。
col1 col2 groups
1 3 6 1
2 4 7 2
3 6 3 1
4 7 4 2
5 10 3 1
6 8 1 1
7 1 10 1
第 7 行中的 10 将其连接到第一个组,因为它与第 5 行共享一个元素。它还与第 6 行(数字 1)共享一个元素,因此第 6 行将位于第 1 组中。
问题
有没有一种简单的方法来组建小组?向量操作?排序算法?如果您尝试使用循环来执行此操作,它很快就会变得非常讨厌,因为每个后续行都可以更改先前行的成员资格,如示例中所示。
【问题讨论】:
-
@MrFlick - 我不一定会称它为重复项。它非常相似,但略有不同。
-
看起来完全相同的 igraph 代码可以工作。我可能错过了什么。
-
@MrFlick - 几乎是这样,尽管这个问题希望将结果分配给成对的案例而不是每个单独的案例。因此需要一些合并才能获得预期的结果。反对票也可能有点苛刻(不确定是不是你)。我从经验中知道,如果您一开始不了解图结构,这是一个很难搜索的主题。
-
@thelatemail 好的,如果你觉得它有很大的不同,我已经删除了我的近距离投票。我没有投反对票;我不认为这是一个坏问题,只是认为它已经有了答案。
标签: r algorithm sorting vector vectorization