R查找元组的“组”

时间:2019-02-18 08:34:17

标签: r

我尝试根据两个变量(id3id1)找到“组”(id2):

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   

例如id1=1a中的bid2相关。但是id1=2也与a有关,因此两者都属于一个组(id3=group1)。但是由于id1=2id1=3共享id2=c,因此id1=3也属于该组(id3=1)。元组((1,2),('a','b','c'))的值在其他任何地方都没有出现,因此没有其他行属于该组(一般标记为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
  }} 

我正在努力查看如何填充。


免责声明:我问了类似的问题here,但是在id2中使用名称导致许多人指出我在R中使用模糊字符串过程,这里不需要,因为存在精确的解。从那时起,我还将包括我尝试过的所有代码。

1 个答案:

答案 0 :(得分:12)

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

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