如果两个不同的分组与dplyr不相交,如何合并

亚瑟·卡瓦略·布里托

假设我有两套标识符id1,并id2在数据帧。如何创建一个新的标识符id3,其工作方式如下:

我认为id1这是更严格的密钥,因此,观察值首先要分组在中id1,然后再分组在id2如果存在两组值不同的行id2,其某些元素具有相同的id1,则这两组值应具有相同的值id3(中的确切值id3无关紧要)。

 df <- data.frame(id1 = c(1, 1, 2, 2, 5, 6),
             id2 = c(4, 3, 1, 2, 2, 7),
             id3 = c(1, 1, 2, 2, 2, 3))

第1行和第2行归为一组,因为它们具有相同的id1第3、4和5行分组在一起,因为3和4具有相同的行,id1而4和5具有相同的行id2

有人可以帮忙吗?我宁愿有一个dplyr包含一般情况的解决方案,其中在列中有任意数量的可能值id

伪旋转

这是一个图论问题。每个id1id2是一个单独的节点,并df提供它们之间的链接。您正在查看每个id也属于哪些弱连接群集。

library(igraph)
df <- df %>% mutate(from = paste0('id1', '_', id1), to = paste0('id2', '_', id2))
dg <- graph_from_data_frame(df %>% select(from, to), directed = FALSE)
df <- df %>% mutate(id3 = components(dg)$membership[from])
df %>% select(id1, id2, id3)

#>   id1 id2 id3
#> 1   1   4   1
#> 2   1   3   1
#> 3   2   1   2
#> 4   2   2   2
#> 5   5   2   2
#> 6   6   7   3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章