r - 来自两列数据帧的简单网络/集群成员资格

标签 r dplyr igraph tidyr

我有一个两列数据框,如下所示:


# What I have
data.frame(id1=c("a", "a", "a", "j", "x", "x"), 
           id2=c("b", "c", "d", "k", "y", "z"))
#>   id1 id2
#> 1   a   b
#> 2   a   c
#> 3   a   d
#> 4   j   k
#> 5   x   y
#> 6   x   z

两列,显示两个不同的 ID。在这种情况下,a、b、c 和 d 都属于同一“族”或“组”,j 和 k 也属于同一“族”或“组”,第三个则是 x、y 和 z。

我想要的是一个数据框,它根据上面的列创建任意组 ID。在此示例中,a-d 被放入组 1,j-k 被放入组 2,x-z 被放入组 3。

我还想显示该组中的人数,但是一旦给出组 ID,我就可以使用 dplyr::add_count(group) 轻松添加此 number_in_group.


# What I want
data.frame(id=c("a", "b", "c", "d", "j", "k", "x", "y", "z"), 
           group=c(1,1,1,1,2,2,3,3,3), 
           number_in_group=c(4,4,4,4,2,2,3,3,3))
#>   id group number_in_group
#> 1  a     1               4
#> 2  b     1               4
#> 3  c     1               4
#> 4  d     1               4
#> 5  j     2               2
#> 6  k     2               2
#> 7  x     3               3
#> 8  y     3               3
#> 9  z     3               3

最佳答案

您可以从集群的成员资格和集群大小 (csize) 中提取信息:

library(dplyr); library(igraph)
clusters <- clusters(graph.data.frame(df))

with(clusters, 
    data.frame(
        id = names(membership), 
        group = membership, 
        number_in_group = csize[membership]
    )
) %>% arrange(group)

#  id group number_in_group
#1  a     1               4
#2  b     1               4
#3  c     1               4
#4  d     1               4
#5  j     2               2
#6  k     2               2
#7  x     3               3
#8  y     3               3
#9  z     3               3

df <- data.frame(id1=c("a", "a", "a", "j", "x", "x"), 
                 id2=c("b", "c", "d", "k", "y", "z"))

关于r - 来自两列数据帧的简单网络/集群成员资格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45736832/

相关文章:

r - dplyr::mutate() -- 在 tibble 嵌套列表中,如何忽略 NULL 嵌套列表?

r - 将数据框中的列乘以另一个数据框中给出的值

c++ - 如何在 C++ 中使用 igraph_add_vertices 添加顶点后获取 igraph 顶点 ID

python - 我如何显示 igraph 输出?

r - 在 R 中,如何以 SVG 格式绘图并输出到内存缓冲区而不是文件

r - 如何使用ggplot2让x轴在非零位置截取y?

r - 在 R 中,按具有客队和主队的体育数据分组 - 一个常见的挫败感

r - 使用igraph采样不同大小的子图

r - 如何将数据框变量名移动到第一行并将新变量名添加到列表中的多个数据框?

Windows 上的 R - 编译错误 -\U 没有使用十六进制数字