#r #dplyr #tidyverse #apply #igraph
Вопрос:
У меня есть набор номинаций на дружбу. Я пытаюсь сначала получить сеть эго каждого индивида, а затем количество каждого типа триад в переписи триад в качестве переменной для эго. Вот некоторые примеры данных и кода на данный момент:
ЕСТЬ ДАННЫЕ:
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)
Ответ №1:
Это не элегантно, но, кажется, работает!
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()