R 从数据帧中的数字生成集合
我有这个data.frame: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
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