R找到元组的"组"

SAF*_*FEX 11 r

我尝试id3根据两个变量(id1,id2)找到"group"():

df = data.frame(id1 = c(1,1,2,2,3,3,4,4,5,5),
            id2 = c('a','b','a','c','c','d','x','y','y','z'),
            id3 = c(rep('group1',6), rep('group2',4)))


   id1 id2      id3
1    1   a   group1
2    1   b   group1
3    2   a   group1
4    2   c   group1
5    3   c   group1
6    3   d   group1
7    4   x   group2
8    4   y   group2
9    5   y   group2
10   5   z   group2   
Run Code Online (Sandbox Code Playgroud)

例如 id1=1关系到abid2.但id1=2也与之相关,a因此两者都属于一个群体(id3=group1).但既然id1=2id1=3分享id2=c,也id1=3属于那个群体(id3=1).元组的值((1,2),('a','b','c'))在其他位置显示为no,因此没有其他行属于该组(group1通常标记).

我的想法是创建一个基于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
  }} 
Run Code Online (Sandbox Code Playgroud)

我很难看到如何填充.


免责声明:我在这里问了一个类似的问题,但是使用id2了很多人的名字,我指的是R中的模糊字符串程序,这里不需要,因为存在一个确切的解决方案.我还包括自那时以来我在这篇文章中尝试过的所有代码.

chi*_*n12 12

您可以利用它igraph来查找不同的网络集群

library(igraph)
g <- graph_from_data_frame(df, FALSE)
cg <- clusters(g)$membership
df$id3 <- cg[df$id1]
df
Run Code Online (Sandbox Code Playgroud)

输出:

   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
Run Code Online (Sandbox Code Playgroud)