R查找忽略NAs的元组组组
基于,我试图基于多个列创建unique,如果“存在通过任何列组合的路径”,则行应分组到相同的ID中。不同之处在于,我的NAs不应用于链接行: R的目标是基于R查找忽略NAs的元组组组,r,igraph,R,Igraph,基于,我试图基于多个列创建unique,如果“存在通过任何列组合的路径”,则行应分组到相同的ID中。不同之处在于,我的NAs不应用于链接行: 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'))的值在其他任何地方都不会出现,因此没有其他行属于该组(通常标
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
值而失败
g <- graph_from_data_frame(df, FALSE)
cg <- clusters(g)$membership
df$id4 <- cg[df$id1]
df
g您可以使用
组件
+成员资格
+合并
这给了你
id1 id2 id3
1 1 a group1
2 1 <NA> group1
3 2 a group1
4 2 c group1
5 3 c group1
6 3 d group1
7 4 x group2
8 4 <NA> group2
9 5 y group2
10 5 z group2
11 6 x group2
12 6 z group2
13 NA <NA> <NA>
14 NA <NA> <NA>
id1 id2 id3
1 a组1
2 1组1
3 2 a组1
4 2 c组1
5 3 c组1
6三维组1
7 4 x组2
8 4组2
9.5 y组2
10 5 z组2
11 6 x组2
12 6 z组2
13 NA
14 NA
g <- graph_from_data_frame(na.omit(df))
merge(
df,
transform(
rev(stack(membership(components(g))[V(g)[names(V(g)) %in% df$id1]])),
values = paste0("group", values)
),
by.x = "id1",
by.y = "ind",
all = TRUE
)
subg <- decompose(graph_from_data_frame(na.omit(df)))
merge(df,
do.call(
rbind,
Map(
function(x, y) cbind(setNames(unique(as_data_frame(x)[1]), "id1"), id3 = y),
subg,
paste0("group", seq_along(subg))
)
),
by = "id1",
all = TRUE
)
id1 id2 id3
1 1 a group1
2 1 <NA> group1
3 2 a group1
4 2 c group1
5 3 c group1
6 3 d group1
7 4 x group2
8 4 <NA> group2
9 5 y group2
10 5 z group2
11 6 x group2
12 6 z group2
13 NA <NA> <NA>
14 NA <NA> <NA>