R找到;“团体”;元组数

R找到;“团体”;元组数,r,R,我试图根据两个变量(id1,id2)找到“组”(id3): 例如,id1=1与id2的a和b相关。但是id1=2也与a相关,因此两者都属于一个组(id3=group1)。但由于id1=2和id1=3共享id2=c,因此id1=3也属于该组(id3=1)。元组((1,2),('a','b','c'))的值在其他任何地方都不会出现,因此没有其他行属于该组(通常标记为group1) 如果您需要处理NAs,请选中此项 我的想法是基于id3创建一个表,然后在循环中填充该表 solution = data.

我试图根据两个变量(
id1
id2
)找到“组”(
id3
):

例如,
id1=1
id2
a
b
相关。但是
id1=2
也与
a
相关,因此两者都属于一个组(
id3=group1
)。但由于
id1=2
id1=3
共享
id2=c
,因此
id1=3
也属于该组(
id3=1
)。元组
((1,2),('a','b','c'))
的值在其他任何地方都不会出现,因此没有其他行属于该组(通常标记为
group1

如果您需要处理
NA
s,请选中此项

我的想法是基于
id3
创建一个表,然后在循环中填充该表

solution = data.frame(id3= c('group1', 'group2'),id1=NA, id2=NA)
group= 1 

for (step in c(1:1000)) { # run many steps to make sure to get all values
  solution$id1[group] = # populate  
  solution$id2[group] = # populate  

  if (fully populated) {
    group = group +1
  }} 
我正在努力了解如何填充



免责声明:我问了一个类似的问题,但在
id2
中使用名称会导致很多人将我引向R中的模糊字符串过程,这里不需要这些过程,因为存在一个精确的解决方案。在这篇文章中,我还包括了我从那时起尝试过的所有代码。

你可以利用
igraph
找到不同的网络集群

library(igraph)
g <- graph_from_data_frame(df, FALSE)
cg <- clusters(g)$membership
df$id3 <- cg[df$id1]
df
library(igraph)
g <- graph_from_data_frame(df, FALSE)
cg <- clusters(g)$membership
df$id3 <- cg[df$id1]
df
   id1 id2 id3
1    1   a   1
2    1   b   1
3    2   a   1
4    2   c   1
5    3   c   1
6    3   d   1
7    4   x   2
8    4   y   2
9    5   y   2
10   5   z   2