根据多个列创建group_indices

Mal*_*lta 12 r dplyr

我想基于两列生成索引以对观察进行分组.但是我希望小组能够通过观察来共享,至少有一个公共观察.我可以看到如何根据共同观察的观察结果制作小组,而不仅仅是其中一个.

例如,使用数据框:

dt <- data.frame(id=1:10,
             G1 = c("A","A","B","B","C","C","C","D","E","F"),
             G2 = c("Z","X","X","Y","W","V","U","s","T","T"))
Run Code Online (Sandbox Code Playgroud)

我想得到一个专栏

1,1,1,1,2,2,2,3,4,4
Run Code Online (Sandbox Code Playgroud)

我尝试使用dplyr中的group_indices,但还没有管理它.

zx8*_*754 15

使用igraph获取成员资格,然后映射名称:

library(igraph)

# convert to graph, and get clusters membership ids
g <- graph_from_data_frame(df1[, c(2, 3, 1)])
myGroups <- components(g)$membership

myGroups 
# A B C D E F Z X Y W V U s T 
# 1 1 2 3 4 4 1 1 1 2 2 2 3 4 

# then map on names
df1$group <- myGroups[df1$G1]


df1
#    id G1 G2 group
# 1   1  A  Z     1
# 2   2  A  X     1
# 3   3  B  X     1
# 4   4  B  Y     1
# 5   5  C  W     2
# 6   6  C  V     2
# 7   7  C  U     2
# 8   8  D  s     3
# 9   9  E  T     4
# 10 10  F  T     4
Run Code Online (Sandbox Code Playgroud)