我尝试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关系到a和b的id2.但id1=2也与之相关,a因此两者都属于一个群体(id3=group1).但既然id1=2和id1=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)