我有一个两列数据框,如下所示:
# 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/