按相交向量分组

发布于 2025-01-20 02:47:30 字数 778 浏览 3 评论 0原文

考虑这个 tibble

tibble(id = list(c(1, 2), c(3, 4, 7), c(3, 5), 10, c(5, 6)))

  id       
  <list>   
1 <dbl [2]>
2 <dbl [3]>
3 <dbl [2]>
4 <dbl [1]>
5 <dbl [2]>

如果一行中的一个或多个值也在另一行中,我想对 id 进行分组。这里,第一行是1 2,并且1和2都没有出现在其他行中,因此它是唯一分配的group == 1。与第 4 行相同。第 2、3 和 5 行共享数字 3(用于第 2 和第 3 行)和数字 5(第 3 和第 5 行),然后将它们全部分配到同一组。

预期输出:

# A tibble: 5 x 2
  id        group
  <list>    <dbl>
1 <dbl [2]>     1
2 <dbl [3]>     2
3 <dbl [2]>     2
4 <dbl [1]>     3
5 <dbl [2]>     2

关于如何做到这一点有什么想法吗?也许igraph

Consider this tibble:

tibble(id = list(c(1, 2), c(3, 4, 7), c(3, 5), 10, c(5, 6)))

  id       
  <list>   
1 <dbl [2]>
2 <dbl [3]>
3 <dbl [2]>
4 <dbl [1]>
5 <dbl [2]>

I'd like to group id if one or more value in one row is also in another row. Here, the first row is 1 2 and neither 1 nor 2 appear in other rows, it is then the only one assigned group == 1. Same with row 4. Row 2, 3 and 5 share digit 3 (for row 2 and 3) and digit 5 (row 3 and 5), they are then all assigned to the same group.

Expected output:

# A tibble: 5 x 2
  id        group
  <list>    <dbl>
1 <dbl [2]>     1
2 <dbl [3]>     2
3 <dbl [2]>     2
4 <dbl [1]>     3
5 <dbl [2]>     2

Any ideas on how to do this? maybe igraph?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦断已成空 2025-01-27 02:47:30
library(tidyverse)
library(igraph)

df %>%
  mutate(rn = paste0('node', row_number()))%>%
  left_join(unnest(., id) %>%
              graph_from_data_frame(dir = FALSE) %>% 
              components() %>%
              getElement('membership')%>%
              enframe('rn', 'group'))

# A tibble: 5 x 3
  id        rn    group
  <list>    <chr> <dbl>
1 <dbl [2]> node1     1
2 <dbl [3]> node2     2
3 <dbl [2]> node3     2
4 <dbl [1]> node4     3
5 <dbl [2]> node5     2
library(tidyverse)
library(igraph)

df %>%
  mutate(rn = paste0('node', row_number()))%>%
  left_join(unnest(., id) %>%
              graph_from_data_frame(dir = FALSE) %>% 
              components() %>%
              getElement('membership')%>%
              enframe('rn', 'group'))

# A tibble: 5 x 3
  id        rn    group
  <list>    <chr> <dbl>
1 <dbl [2]> node1     1
2 <dbl [3]> node2     2
3 <dbl [2]> node3     2
4 <dbl [1]> node4     3
5 <dbl [2]> node5     2
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文