r - 按组获取子图并计算 R 中的网络模块化
问题描述
我有一个大约 80 所学校的网络数据集(节点是每所学校的学生)。我需要计算每所学校的模块化。理想情况下,创建一个只有学校 ID 和学校模块化分数的新数据框。
数据受到限制,所以我不能发布它,但这是一个玩具示例:
有数据
student_id school_id friendid_1 friendid_2 friendid_3 friendid_4
1 101 3 NA NA NA
2 101 5 2 3 NA
3 101 2 4 5 NA
4 101 1 6 NA 3
5 101 1 NA 6 2
6 101 5 NA 2 1
7 201 8 NA NA NA
8 201 NA 9 NA NA
9 201 8 7 NA NA
10 201 7 9 NA NA
11 301 19 15 NA 12
12 301 20 NA 19 11
13 301 15 19 11 NA
14 301 16 NA 12 18
15 301 17 20 17 NA
16 301 14 19 20 13
17 301 20 18 13 14
18 301 13 NA 19 17
19 301 17 NA 16 11
20 301 13 17 11 14
想要的数据(只是学校 ID 和模块化分数
school_id modularity
101
201
301
以下是我尝试过的。我首先创建了一个仅包含学校 ID 的数据框。然后尝试了一个 for 循环,在其中我按学校抓取所有受访者并制作他们的图表以计算模块化,然后将其放入学校 DF。这没有用:
schools <- as.data.frame(unique(df$school_id))
for (school in 1:length(unique(df$school_id))){
g <- graph_from_data_frame(school, directed = FALSE)
sg <- igraph::simplify(g, remove.loops = TRUE)
cl <- cluster_fast_greedy(sg)
schools <- modularity(cl)
}
解决方案
弄清楚了!
df$school_id <- as.factor(df$school_id)
school_list <- list()
for (i in levels(df$school_id)){
schl <- subset(df, school == i)
schl_g <- graph_from_data_frame(schl, directed = FALSE) %>%
igraph::simplify(., remove.loops = TRUE)
schl_clust <- cluster_fast_greedy(schl_g)
schl_mod <- modularity(schl_clust)
id_mod <- select(df, school) %>%
subset(., school == i) %>%
unique()
id_mod$schl_mod <- schl_mod
school_list <- c(list(id_mod), school_list)
}
schools <- bind_rows(school_list)
推荐阅读
- javascript - 为全球所有商店创建从上午 9 点开始的促销活动
- c# - 从 .NET 控制台应用程序优雅地(和受控地)退出
- c# - 如何在 Redis 中创建持久票证
- macos - 是否可以在双击期间抑制单击事件?
- c++ - 进行如此复杂的 C++ 类设计的目的是什么?
- jsonschema - 即使缺少必填字段,Rapidjson 也会成功验证
- python - 在 Pandas DataFrame 中的 Python 中以毫秒为单位将 UTC 时间转换为纪元的有效方法
- java - javers MANAGED_CLASS_MAPPING_ERROR
- javascript - 访问慢页面时立即反馈
- javascript - 将 Worker 线程与 WordPress Nonce 一起使用(自定义 wp-api 端点)