r - R 中按两列分组和级别并集

标签 r data.table dplyr

我遇到了一个看似微不足道的问题,但我现在无法弄清楚。我什至不知道如何正确地表述它,如果您有任何建议,欢迎您。 我有一个 data.frame,我想根据两列对其进行分组/索引。问题是,我想要分组的行在这些列中不共享相同的值。相反,某些行在一列中具有相同的值,然后其中一些行与第二列中的不同行具有共同的值(我也想将其包含在分组中)。这是一个最小的例子,我希望这能让它更清楚一点:

id V1 V2 group_id
1   a  c        1
2   a  d        1
3   b  d        1
4   w  y        2
5   w  z        2
6   x  z        2

第 1 行和第 2 行具有 V1 列的共同值 a。但我不仅想对它们进行分组,还想对第 3 行进行分组,该行通过 V2 列的值 d 进行“连接”。目前,我只能分别对第 1,2 行和第 2,3 行进行分组。

第二组也是如此,这里我想用 V1 中的 w 或 V2 中的 z 对值进行分组。 xy 不相关。

非常感谢任何帮助。

最佳答案

以下是如何使用 igraph 包中的 cluster 函数来实现这一点:

library(igraph)
relations <- data.frame(from=df$V1,to=df$V2)
g <- graph_from_data_frame(relations)
group_id <- data.frame(V=names(clusters(g)$membership),
                       cluster=clusters(g)$membership,stringsAsFactors=FALSE)
left_join(df,group_id,by=c("V1"="V"))

  id V1 V2 group_id cluster
1  1  a  c        1       1
2  2  a  d        1       1
3  3  b  d        1       1
4  4  w  y        2       2
5  5  w  z        2       2
6  6  x  z        2       2

关于r - R 中按两列分组和级别并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43482086/

相关文章:

r - 在 R 中,使用日期范围内的事件计数创建变量

r - 在 R 中使用 quantmod 绘制 SPX 与 VIX

r - 如何独立更改图例中的颜色线条大小和形状大小?

r - 大合并/内存管理

r - 使用Tidyverse Join更新/替换数据框中的值

sql - 使用dplyr窗口函数滞后(SQL数据库)

r - 在 R 中创建一个由级别名称填充的新列

r - 折叠数据框的特定行/案例

r - 从 knitr 调用时 fread 的奇怪输出

r - 按每个键中的列对 data.table 进行排序