我试图根据两个变量(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
例如,id1=1
与a
和b
of id2
有关。但是id1=2
也与a
有关,因此两者都属于一个组(id3=group1
)。但是由于id1=2
和id1=3
共享id2=c
,id1=3
也属于这个组(id3=1
)。元组((1,2),('a','b','c'))
的值在其他地方不显示,因此没有其他行属于该组(该组一般被标记为group1
)。
如果您需要照顾NA
**s,,请检查这个[ take **](https://stackoverflow.com/questions/67331014/r-find-groups-of-tupples-ignoring-nas)
我的想法是创建一个基于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中的模糊字符串过程,这在这里并不需要,因为有一个精确的解决方案。我也包括所有的代码,我尝试了从那时起,在这篇文章。
发布于 2019-02-18 00:46:43
您可以利用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
https://stackoverflow.com/questions/54743184
复制相似问题