Igraph:仅获取改变的自我网络密度
Igraph: get ego network density of alters only
我有一个自我网络列表,我的目标是只获得改变的密度。所以基本上从密度计算中删除了自我。
使用来自我的 的相同样本数据,我可以使用该答案获得自我网络密度列表,但如何不将每个自我都包括在该计算中?
数据:
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)
当前代码:
g <- graph_from_data_frame(df, directed = TRUE)
egonet_list <- make_ego_graph(g, order = 1, mode = "out")
dat <- data.frame(
student_id = names(V(g)),
egonet_density = lapply(egonet_list, graph.density) %>% unlist()
)
但我想要的输出意味着从密度计算中删除自我以仅获得改变的密度。
更新
例如,在数据示例中使用 student_id 18:
egonet_list[[18]] %>% delete.vertices(., "18") %>% graph.density()
我苦苦挣扎的地方是如何在应用或循环中执行此操作,以便它可以 运行 通过每个自我网络并执行此操作。
我们可以试试下面的代码
dat <- data.frame(
student_id = names(V(g)),
egonet_density = mapply(function(gnet, v) graph.density(delete.vertices(gnet, v)), egonet_list, as.list(names(V(g))))
)
这给出了
> dat
student_id egonet_density
1 1 NaN
2 2 0.5000000
3 3 0.5000000
4 4 0.3333333
5 5 0.5000000
6 6 0.6666667
7 7 NaN
8 8 NaN
9 9 0.5000000
10 10 0.5000000
11 11 0.1666667
12 12 0.5000000
13 13 0.5000000
14 14 0.0000000
15 15 1.0000000
16 16 0.1666667
17 17 0.2500000
18 18 0.5000000
19 19 0.0000000
20 20 0.1666667
我有一个自我网络列表,我的目标是只获得改变的密度。所以基本上从密度计算中删除了自我。
使用来自我的
数据:
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)
当前代码:
g <- graph_from_data_frame(df, directed = TRUE)
egonet_list <- make_ego_graph(g, order = 1, mode = "out")
dat <- data.frame(
student_id = names(V(g)),
egonet_density = lapply(egonet_list, graph.density) %>% unlist()
)
但我想要的输出意味着从密度计算中删除自我以仅获得改变的密度。
更新
例如,在数据示例中使用 student_id 18:
egonet_list[[18]] %>% delete.vertices(., "18") %>% graph.density()
我苦苦挣扎的地方是如何在应用或循环中执行此操作,以便它可以 运行 通过每个自我网络并执行此操作。
我们可以试试下面的代码
dat <- data.frame(
student_id = names(V(g)),
egonet_density = mapply(function(gnet, v) graph.density(delete.vertices(gnet, v)), egonet_list, as.list(names(V(g))))
)
这给出了
> dat
student_id egonet_density
1 1 NaN
2 2 0.5000000
3 3 0.5000000
4 4 0.3333333
5 5 0.5000000
6 6 0.6666667
7 7 NaN
8 8 NaN
9 9 0.5000000
10 10 0.5000000
11 11 0.1666667
12 12 0.5000000
13 13 0.5000000
14 14 0.0000000
15 15 1.0000000
16 16 0.1666667
17 17 0.2500000
18 18 0.5000000
19 19 0.0000000
20 20 0.1666667