来自两列数据框的简单网络/集群成员
Simple network / cluster membership from two-column data frame
我有一个如下所示的两列数据框:
# 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 都在相同的 "family" 或 "group" 中,j 和 k 也是如此,而在第三个中,x、y 和 z.
我想要的是一个基于以上列创建任意组 ID 的数据框。在此示例中,a-d 被放入第 1 组,j-k 被放入第 2 组,x-z 被放入第 3 组。
我还想显示该组中的个人数量,但一旦给出组 ID,我可以轻松添加此 number_in_group
和 dplyr::add_count(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"))
我有一个如下所示的两列数据框:
# 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 都在相同的 "family" 或 "group" 中,j 和 k 也是如此,而在第三个中,x、y 和 z.
我想要的是一个基于以上列创建任意组 ID 的数据框。在此示例中,a-d 被放入第 1 组,j-k 被放入第 2 组,x-z 被放入第 3 组。
我还想显示该组中的个人数量,但一旦给出组 ID,我可以轻松添加此 number_in_group
和 dplyr::add_count(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"))