Igraph:为自我网络创建三元组人口普查数据集

Igraph: create dataset of triad census for ego networks

我有一个友谊提名数据集。我试图首先获取每个人的自我网络,然后将黑社会人口普查中每种类型的黑社会的数量作为自我的变量。到目前为止,这是一些示例数据和代码:

有数据:

df<-read.table(text="student_id alter
 1     3
 2     5
 2     2
 2     3
 3     2
 3     4
 3     5
 4     1
 4     6
 4     3
 5     1
 5     6
 5     2
 6     5
 6     2
 6     1
 7     8
 8     9
 9     8
 9     7
10     7
10     9
11    19
11    15
11    12
12    20
12    19
12    11
13    15
13    19
13    11
14    16
14    12
14    18
15    17
15    20
15    17
16    14
16    19
16    20
16    13
17    20
17    18
17    13
17    14
18    13
18    19
18    17
19    17
19    16
19    11
20    13
20    17
20    11
20    1", header = TRUE)

想要数据:

student_id  triad_003   triad_012   triad_102   triad_021D  triad_021U  triad_021C triad_111D   triad_111U  triad_030T  triad_030C  triad_201   triad_120D  triad_120U  triad_120C  triad_210   triad_300
        1           2           2           2           0           4           2           2           2           1           1           0           0           1           1           0           0
        2           0           0           0           0           0           0           2           0           0           0           0           0           0           0           2           0
        3           0           1           1           0           1           0           1           2           0           1           1           0           0           1           1           0
        4           0           0           0           0           0           1           0           1           1           0           0           0           0           1           0           0
        5           0           0           0           1           0           1           3           1           0           1           0           0           1           0           2           0
        6           0           1           1           1           1           1           1           1           1           0           0           0           1           0           1           0
        7           0           0           0           0           0           1           1           0           1           0           0           0           0           1           0           0
        8           0           0           0           0           0           0           0           0           0           0           0           0           0           1           0           0
        9           0           0           0           0           0           1           1           0           1           0           0           0           0           1           0           0
        10          0           0           0           0           0           0           0           0           1           0           0           0           0           0           0           0
        11          0           3           0           2           2           2           2           2           2           2           0           1           0           1           1           0
        12          1           1           1           1           0           2           2           0           0           0           0           0           0           1           1           0
        13          3           8           4           1           5           8           6           5           4           4           2           2           2           2           0           0
        14          2           0           2           1           0           1           1           2           0           0           0           0           0           1           0           0
        15          0           0           0           0           0           2           0           1           2           3           0           1           1           0           0           0
        16          1           2           0           0           0           1           0           3           1           0           1           0           0           1           0           0
        17          2           10          0           2           2           6           2           1           1           3           1           1           2           2           0           0
        18          0           1           0           1           0           3           0           0           1           1           0           0           1           2           0           0
        19          4           3           6           0           4           4           4           2           1           1           1           1           1           2           1           0
        20          11          9           6           2           4           9           3           3           3           3           0           1           1           1           0           0

到目前为止,我已经在下面完成了这项工作,这为我提供了每个三元组的计数。但我正在努力获取上面我想要的数据集:

egonet_list <- graph_from_data_frame(df, directed = TRUE) %>%
               make_ego_graph(., order = 1, mode = "out") 

triads <- lapply(egonet_list, triad.census)

这并不优雅,但它似乎有效!

g <- graph_from_data_frame(df, directed = TRUE) 
egonet_list <- make_ego_graph(g)


triads <- lapply(egonet_list, triad_census_full) %>% as.data.frame() %>%
        `colnames<-`(names(V(g))) %>% t() %>% as.data.frame()