基于至少一个共同值对 Id 进行分组

阿努希拉万

我有一个列表,其元素是整数,如果这些元素至少共享一个值,我想累积这些元素。对于那些与其他元素不共享任何价值观的元素,我希望它们保持原样。这是我的样品日期:

x <- list(c(1, 2), c(1, 2, 3), c(2, 3, 4), c(3, 4, 5), c(4, 5, 8), c(6, 9, 7), 7, c(5, 8), 10, 11)

这是我想要的输出:

desired_reult <- list(c(1, 2, 3, 4, 5, 8), 
                      c(6, 9, 7), 
                      10, 
                      11)

我想先用reduceaccumulate函数来做purrrtidyverse欢迎任何其他解决方案。到目前为止,我已经尝试过这个解决方案,但它只给了我一个union,显然放弃了其余的:

x %>% 
  reduce(~ if(any(.x %in% .y)) union(.x, .y) else .x)

[1] 1 2 3 4 5 8

一般来说,我正在寻找一种将整数 (id) 与常见值(如某种聚类)进行分组的方法,但不幸的是,到目前为止,我的努力都是徒劳的。

非常感谢您提前提供帮助。

伊恩坎贝尔

我怀疑有一套覆盖解决方案,但在此期间,这里有一个图形方法:

首先,让我们将整数向量转换为边列表,以便将其制成图形。我们可以使用expand.grid.

library(igraph)
edgelist <- do.call(rbind,lapply(x,\(x)expand.grid(x,x)))

现在我们有一个两列的 data.frame,显示所有整数(一组边)之间的连接。

igraph::graph.data.frame 可以方便地从中制作图形。

从那里我们可以igraph::components用来提取连接的组件。

g <- graph.data.frame(edgelist)
split(names(components(g)$membership),components(g)$membership)
#$`1`
#[1] "1" "2" "3" "4" "5" "8"
#$`2`
#[1] "6" "9" "7"
#$`3`
#[1] "10"
#$`4`
#[1] "11"

或者使用 Tidyverse:

library(dplyr); library(purrr)
map_dfr(x, ~expand.grid(.x,.x)) %>%
   graph.data.frame() %>%
   components() %>% 
   pluck(membership) %>%
   stack() %>%
   {split(as.numeric(.[,2]),.[,1])}
#$`1`
#[1] 1 2 3 4 5 6
#$`2`
#[1] 7 8 9
#$`3`
#[1] 10
#$`4`
#[1] 11

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法按 ID 对表值进行分组

使用 ID 对虚拟表值进行分组

对常见值的行进行分组,为每个集合创建一个新的“组 ID”

PostgreSQL:通过对相同 id 的值进行分组来创建数组

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

通过匹配数据ID进行分组,并通过另一个数据属性进行排序

如何基于共同值对数组进行分组?

按 id 对结果进行分组

HAVING子句:至少一个未分组的值是X

如何在ID线后跟值线的文件中按ID对行进行分组?

聚合子文档,按 id 列表过滤它们,并按 id 对值进行分组

如何基于mongodb中的另一个数组值对数组进行分组

如何使用Python对每个ID的首个和最后一个审阅日期列进行分组,并使用python向前填充N / A值?

如何按用户ID对表进行分组并为另一列获取最大值?

基于一个列的MAX值和另一列的CONTITIONALLY topN个值进行分组和过滤

是否有一个“ OneOf”类用于对没有共同祖先的类进行分组

当一个值相同时对子数组进行分组

按 2 个日期间隔列和 2 个其他列对 ID 进行分组

在 R 中:根据事件的 ID 对事件序列进行分组,并计算第一个和最后一个看到的事件之间的时间差

如何通过对相同ID的值进行分组来创建新数组

PHP:按 id 对对象数组进行分组,同时汇总对象值

对重叠值或日期与 sql 中的 id 分组进行求和/计数

Python :(熊猫)如何忽略按ID分组的最低和最高25%的值进行均值计算

MySQL-选择ID下的行,并按具有最新时间戳记的列值进行分组

用3个对应ID名称的阈值条件对数据框进行分组

在2个id上对Pandas中的重复项进行分组,并以不同的方式转换其余的列

按两个具有相同ID的不同表的总和进行分组

在mongodb聚合中按_id对3个数组进行分组

通过唯一的交替颜色对列进行分组,并使用XlsxWriter根据ID交替显示这些颜色