【问题标题】:Get subgraphs by group and calculate network modularity in R按组获取子图并计算 R 中的网络模块化
【发布时间】:2020-03-21 07:27:20
【问题描述】:

我有一个大约 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)
}

【问题讨论】:

    标签: r for-loop apply igraph network-analysis


    【解决方案1】:

    想通了!

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      相关资源
      最近更新 更多