R 从数据帧中的数字生成集合

R 从数据帧中的数字生成集合,r,R,我有这个data.frame: structure(list(X0 = c(9, 13, 13, 13, 35, 36, 37, 38, 39, 40, 40, 42, 43, 44), X0.1 = c(10, 40, 45, 46, 36, 37, 38, 40, 46, 45, 46, 43, 44, 46)), .Names = c("A", "B"), row.names = c(NA, 14L), class = "data.frame") A B 1 9

我有这个data.frame:

structure(list(X0 = c(9, 13, 13, 13, 35, 36, 37, 38, 39, 40, 
40, 42, 43, 44), X0.1 = c(10, 40, 45, 46, 36, 37, 38, 40, 46, 
45, 46, 43, 44, 46)), .Names = c("A", "B"), row.names = c(NA, 
14L), class = "data.frame")
   A    B
1   9   10
2  13   40 
3  13   45
4  13   46
5  35   36
6  36   37
7  37   38
8  38   40
9  39   46
10 40   45
11 40   46
12 42   43
13 43   44
14 44   46
我想创建这样的集合:第2、3和4行有13个,因此它们将被分组为一个集合(13、40、45、46)

如果任何其他行甚至有一个成员与此集合共用,则该行的两个成员都将包含在此集合中

由于第8行与上述集合有40个共同点,因此集合还将包括它们:(13,40,45,46,38)

现在,第7行有一个成员(38)与此集合共用,其他成员(37)也将包含在此集合中。该集合将变为(13,40,45,46,38,37)

如果一行的两个成员都不是任何现有集合的公共成员,则它们将形成自己的集合。像第1行一样,第9行和第10行中没有任何一行。所以它们形成一组(9,10)

最后,我想打印出所有的数据集

我可以在R程序中附带这个吗?谢谢你的帮助

这就是你想要的吗

f <- function(s, v) {
  m <- which(s$A %in% v | s$B %in% v)
  if (!any(m)) v
  else Recall(s[-m, ], sort(unique(c(v, c(unlist(s[m, ]))))))
}

done <- c()
for(n in unique(unlist(d))) {
  if (n %in% done) next
  r <- f(d, n)
  done <- c(done, r)
  cat("(", r, ") ")
}

已更新

done <- c()
ret <- list()
for(n in unique(unlist(d))) {
  if (n %in% done) next
  r <- f(d, n)
  done <- c(done, r)
  cat("(", r, ") ")
  ret <- c(ret, list(r))
}

如果有两个实例,A=13和B=40。所以…你想要(13,40,40)还是(13,40)?只要(13,40)就足够了。因为我现在还不能使用笔记本电脑,我是R的新手,我觉得这个问题很有趣。稍后将尝试;)是的,你可以在RGreat中完成这项工作。谢谢它们可以组合成一个包含这些数字的向量(这里是2)的列表吗?这真的很好。非常感谢。这看起来像一个简单的问题,但显然需要专家编程技巧。
done <- c()
ret <- list()
for(n in unique(unlist(d))) {
  if (n %in% done) next
  r <- f(d, n)
  done <- c(done, r)
  cat("(", r, ") ")
  ret <- c(ret, list(r))
}
> ret
[[1]]
[1]  9 10

[[2]]
 [1] 13 35 36 37 38 39 40 42 43 44 45 46