r - 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)
当前代码:
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
推荐阅读
- prometheus - Prometheus 在 2 次连续失败时发出警报
- python - 需要一些帮助从循环创建 JSON 并且格式不正确
- regex - 我无法使用带有两个字段和以美元符号开头的第二个字段的 ansible lineinfile 正则表达式进行匹配
- java - 为什么这个 DP 算法比蛮力算法慢?
- terraform - 有什么方法可以条件化 jsonencoded 数据中的变量?
- python - 为什么当我在输入中请求一个值并输入该输入时它不会返回我想要的值
- javascript - 使用 axios 拦截器获取边界标头
- hardware - 8086 中的 BHE' 信号何时激活或停用?
- html - 打开嵌套选项卡时选项卡关闭
- python - conda 从 bash 脚本导出环境