簡體   English   中英

使用 apply 從 R 中的 dataframe 創建鄰接矩陣列表

[英]Use apply to create a list of adjacency matrices from dataframe in R

我在 3 波中與 5 所不同的學校建立了友誼的邊緣列表。 我想為每所學校創建一個列表,其中包含 3 個鄰接矩陣(每個波一個)。 我可以一個一個地做到這一點,但我想使用循環或應用 function 來自動化它。

這是我用於一所學校和波的代碼:

school1_w1 <- filter(edges, school == 1 & wave == 1) %>% 
          graph_from_data_frame(., directed = TRUE) %>%
          as_adjacency_matrix() %>% as.matrix()

school1_w2 <- filter(edges, school == 1 & wave == 2) %>% 
          graph_from_data_frame(., directed = TRUE) %>%
          as_adjacency_matrix() %>% as.matrix()

school1_w3 <- filter(edges, school == 1 & wave == 3) %>% 
          graph_from_data_frame(., directed = TRUE) %>%
          as_adjacency_matrix() %>% as.matrix()

school1 <- list(school1_w1, school1_w2, school1_w3)

我如何通過申請或循環為所有 5 所學校做到這一點? 下面的示例數據:

 ego  alter  wave  school
   1    4       1   1
   1    4       2   1
   1    3       3   1
   2    3       1   1
   2    4       2   1
   2    4       3   1
   3    1       1   1
   3    2       2   1
   3    3       3   1
   4    1       1   1
   4    1       2   1
   4    1       3   1
   5    8       1   2
   5    6       2   2
   5    7       3   2
   6    7       1   2
   6    7       2   2
   6    7       3   2
   7    8       1   2
   7    6       2   2
   7    6       3   2
   8    7       1   2
   8    7       2   2
   8    7       3   2
   9    10      1   3
   9    11      2   3
   9    12      3   3
  10    11      1   3
  10    11      2   3
  10    9       3   3
  11    12      1   3
  11    10      2   3
  11    12      3   3
  12    9       1   3
  12    10      2   3
  12    10      3   3
  13    14      1   4
  13    15      2   4
  13    16      3   4
  14    16      1   4
  14    16      2   4
  14    13      3   4
  15    16      1   4
  15    16      2   4
  15    16      3   4
  16    15      1   4
  16    15      2   4
  16    15      3   4
  17    20      1   5
  17    18      2   5
  17    18      3   5
  18    19      1   5
  18    20      2   5
  18    19      3   5
  19    17      1   5
  19    17      2   5
  19    17      3   5
  20    18      1   5
  20    17      2   5
  20    17      3   5

我們可以使用split + lapply

library(igraph)

result <- lapply(split(edges, list(edges$school, edges$wave)), function(x) {
  graph_from_data_frame(x, directed = TRUE) %>%
    as_adjacency_matrix() %>% as.matrix()
})

by

result <- by(edges, list(edges$school, edges$wave), function(x) {
  graph_from_data_frame(x, directed = TRUE) %>%
    as_adjacency_matrix() %>% as.matrix()
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM