使用R对链接的唯一ID对进行分组

Flo*_*ris 4 r dplyr tidyr

我正在尝试使用R将多对唯一ID链接在一起.鉴于下面的示例,我有两个ID(此处为ID1和ID2)表示链接.我正在尝试创建链接的行组.在这个例子中,A链接到B,链接到D,链接到E.因为这些都是连接的,我想把它们组合在一起.接下来,还有X链接到Y和Z.因为这两个也连接,我也想将它们分配给一个组.我如何使用R来解决这个问题?

谢谢!

示例数据:

ID1 ID2
A   B
B   D
D   E
X   Y
X   Z
Run Code Online (Sandbox Code Playgroud)

DPUT R表示

structure(list(id1 = structure(c(1L, 2L, 3L, 4L, 4L), .Label = c("A", "B", "D", "X"), class = "factor"), id2 = structure(1:5,.Label = c("B", "D", "E", "Y", "Z"), class = "factor")), .Names = c("id1", "id2"), row.names = c(NA, -5L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

需要的输出:

ID1 ID2 GROUP
A   B   1
B   D   1
D   E   1
X   Y   2
X   Z   2
Run Code Online (Sandbox Code Playgroud)

Ste*_*pré 10

正如@Frank在评论中提到的,你可以使用igraph:

library(igraph)
idf <- graph.data.frame(df)
clusters(idf)$membership
Run Code Online (Sandbox Code Playgroud)

这使:

A B D X E Y Z 
1 1 1 2 1 2 2 
Run Code Online (Sandbox Code Playgroud)

是否要将结果分配回以下行df:

merge(df, stack(clusters(idf)$membership), by.x = "id1", by.y = "ind", all.x = TRUE)
Run Code Online (Sandbox Code Playgroud)

  • 是的我知道这一点,并担心igraph功能会破坏dplyr功能(我使用dplyr的所有东西,真的)但看起来一切都很好.而且我想我可以在igraph之后加载dplyr而不必担心. (2认同)