R 获取所有观察值组合集合之间的交点

R 获取所有观察值组合集合之间的交点,r,intersection,R,Intersection,我有一个像这样的数据集 target.id source.id connected 1 1 0 2 1 0 3 1 0 4 1 0 5 1 0 6 1 0 1 2 1 2 2 0

我有一个像这样的数据集

   target.id source.id connected
          1      1     0
          2      1     0
          3      1     0
          4      1     0
          5      1     0
          6      1     0
          1      2     1
          2      2     0
          3      2     1
基本上,我有一个源位置、目标位置以及它们是否连接。这里的连接是定向的,例如,位置1可以连接到位置8,而位置8不连接到位置1(想想航空公司的航班,亚特兰蒂斯可以向火星发送航班,而火星可能不向亚特兰蒂斯发送航班,这意味着亚特兰蒂斯连接到火星,而火星不连接到亚特兰蒂斯)

我需要确定一组“完全”连接的位置,其中所有观测都是彼此的来源和目标。考虑到我有75个位置,我需要两两做,3乘3,并且尽可能多地做。例如,对于3乘3,位置3、5和8都是彼此的源和目标

我试图解决这个问题的方法是获得所有
1:length(unique(target.id))
2乘2,3乘3的排列,直到8乘8(8乘8是我将看到的最大集合),然后
将它们全部相交


然而,很明显,这太慢了。有更好的方法吗

听起来您希望所有大小为2到8的团都来自一个有向图,其中节点是您的ID,当源->目标在数据集中标记为已连接时,边就存在。第一步是仅对连接的边进行过滤,生成类似以下示例数据的内容:

(filtered <- data.frame(source.id = c(1, 1, 2, 2, 3, 3, 3, 4, 4), target.id = c(2, 3, 1, 3, 1, 2, 4, 3, 5), connected = 1))
#   source.id target.id connected
# 1         1         2         1
# 2         1         3         1
# 3         2         1         1
# 4         2         3         1
# 5         3         1         1
# 6         3         2         1
# 7         3         4         1
# 8         4         3         1
# 9         4         5         1

(过滤方向问题意味着目标不能低于源?destiny是否与目标相同?修改问题,以包含具有一致术语的所需输出,并充分解释约束条件。
(bidir <- filtered[duplicated(paste(pmin(filtered$source.id, filtered$target.id),
                                    pmax(filtered$source.id, filtered$target.id))),])
#   source.id target.id connected
# 3         2         1         1
# 5         3         1         1
# 6         3         2         1
# 8         4         3         1
library(igraph)
g <- graph.data.frame(bidir, directed=FALSE)
cliques(g, min=2, max=8)
# [[1]]
# + 2/4 vertices, named:
# [1] 2 3
# 
# [[2]]
# + 2/4 vertices, named:
# [1] 2 1
# 
# [[3]]
# + 2/4 vertices, named:
# [1] 3 4
# 
# [[4]]
# + 2/4 vertices, named:
# [1] 3 1
# 
# [[5]]
# + 3/4 vertices, named:
# [1] 2 3 1