如何解决使用 apply 从 R
我在 3 波中与 5 所不同学校的友谊边缘列表。我想为每所学校创建一个列表,其中包含 3 个邻接矩阵(每个 wave 一个)。我可以一个一个地做,但我想使用循环或应用函数来自动化它。
这是我在一所学校和wave中使用的代码:
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,edges$wave),directed = TRUE) %>%
as_adjacency_matrix() %>% as.matrix()
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。