【发布时间】:2021-11-30 08:06:09
【问题描述】:
我有一份来自 5 所学校在 3 波中的友谊提名的边缘列表。我想将每个自我的入度、出度和约束值放入数据框中。我想我需要创建一个图形对象列表,然后使用 apply 或循环来遍历它们并计算每个度量值,但我不知道如何做到这一点并获得每个 ego 的 id 号的数据框输出。
这是一些示例数据:
edges<-read.table(text=" 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", header = TRUE)
这是我想要的数据:
df <-read.table(text="student_id wave indegree outdegree constraint
1 1 2 1 0.5555556
1 2 1 1 1.0000000
1 3 1 1 0.5000000
2 1 0 1 1.0000000
2 2 1 1 0.5000000
2 3 0 1 1.0000000
3 1 1 1 0.5000000
3 2 0 1 1.0000000
3 3 2 1 1.0000000
4 1 1 1 1.0000000
4 2 2 1 0.5555556
4 3 1 1 0.5000000
5 1 0 1 1.0000000
5 2 0 1 1.0000000
5 3 0 1 1.0000000
6 1 0 1 1.0000000
6 2 2 1 0.5555556
6 3 1 1 1.0000000
7 1 2 1 0.5555556
7 2 2 1 0.5555556
7 3 3 1 0.3750000
8 1 2 1 0.5555556
8 2 0 1 1.0000000
8 3 0 1 1.0000000
10 1 1 1 0.5000000
10 2 2 1 0.5555556
10 3 1 1 1.0069444
11 1 1 1 0.5000000
11 2 2 1 0.5555556
11 3 0 1 1.0000000
12 1 1 1 0.5000000
12 2 0 1 1.0000000
12 3 2 1 0.6111111
9 1 1 1 0.5000000
9 2 0 1 1.0000000
9 3 1 1 1.0069444
13 1 0 1 1.0000000
13 2 0 1 1.0000000
13 3 1 1 0.5000000
14 1 1 1 0.5000000
14 2 0 1 1.0000000
14 3 0 1 1.0000000
15 1 1 1 1.0000000
15 2 2 1 0.5555556
15 3 1 1 1.0000000
16 1 2 1 0.5555556
16 2 2 1 0.5555556
16 3 2 1 0.5555556
17 1 1 1 0.5000000
17 2 2 1 0.6111111
17 3 2 1 0.6111111
18 1 1 1 0.5000000
18 2 1 1 1.0069444
18 3 1 1 1.0069444
19 1 1 1 0.5000000
19 2 0 1 1.0000000
19 3 1 1 1.0069444
20 1 1 1 0.5000000
20 2 1 1 1.0069444
20 3 0 1 1.0000000", header = TRUE)
这是我用来获取上述数据输出的非常长的代码。有没有办法通过应用或循环来做到这一点?
s1w1 <- graph_from_data_frame(d = filter(edges, school == 1 & wave == 1))
s1w2 <- graph_from_data_frame(d = filter(edges, school == 1 & wave == 2))
s1w3 <- graph_from_data_frame(d = filter(edges, school == 1 & wave == 3))
s2w1 <- graph_from_data_frame(d = filter(edges, school == 2 & wave == 1))
s2w2 <- graph_from_data_frame(d = filter(edges, school == 2 & wave == 2))
s2w3 <- graph_from_data_frame(d = filter(edges, school == 2 & wave == 3))
s3w1 <- graph_from_data_frame(d = filter(edges, school == 3 & wave == 1))
s3w2 <- graph_from_data_frame(d = filter(edges, school == 3 & wave == 2))
s3w3 <- graph_from_data_frame(d = filter(edges, school == 3 & wave == 3))
s4w1 <- graph_from_data_frame(d = filter(edges, school == 4 & wave == 1))
s4w2 <- graph_from_data_frame(d = filter(edges, school == 4 & wave == 2))
s4w3 <- graph_from_data_frame(d = filter(edges, school == 4 & wave == 3))
s5w1 <- graph_from_data_frame(d = filter(edges, school == 5 & wave == 1))
s5w2 <- graph_from_data_frame(d = filter(edges, school == 5 & wave == 2))
s5w3 <- graph_from_data_frame(d = filter(edges, school == 5 & wave == 3))
df1w1 <- data.frame(
student_id = names(V(s1w1)),
wave = 1,
indegree = degree(s1w1, mode = "in"),
outdegree = degree(s1w1, mode = "out"),
constraint = constraint(s1w1) %>% unlist())
df1w2 <- data.frame(
student_id = names(V(s1w2)),
wave = 2,
indegree = degree(s1w2, mode = "in"),
outdegree = degree(s1w2, mode = "out"),
constraint = constraint(s1w2) %>% unlist())
df1w3 <- data.frame(
student_id = names(V(s1w3)),
wave = 3,
indegree = degree(s1w3, mode = "in"),
outdegree = degree(s1w3, mode = "out"),
constraint = constraint(s1w3) %>% unlist())
df2w1 <- data.frame(
student_id = names(V(s2w1)),
wave = 1,
indegree = degree(s2w1, mode = "in"),
outdegree = degree(s2w1, mode = "out"),
constraint = constraint(s2w1) %>% unlist())
df2w2 <- data.frame(
student_id = names(V(s2w2)),
wave = 2,
indegree = degree(s2w2, mode = "in"),
outdegree = degree(s2w2, mode = "out"),
constraint = constraint(s2w2) %>% unlist())
df2w3 <- data.frame(
student_id = names(V(s2w3)),
wave = 3,
indegree = degree(s2w3, mode = "in"),
outdegree = degree(s2w3, mode = "out"),
constraint = constraint(s2w3) %>% unlist())
df3w1 <- data.frame(
student_id = names(V(s3w1)),
wave = 1,
indegree = degree(s3w1, mode = "in"),
outdegree = degree(s3w1, mode = "out"),
constraint = constraint(s3w1) %>% unlist())
df3w2 <- data.frame(
student_id = names(V(s3w2)),
wave = 2,
indegree = degree(s3w2, mode = "in"),
outdegree = degree(s3w2, mode = "out"),
constraint = constraint(s3w2) %>% unlist())
df3w3 <- data.frame(
student_id = names(V(s3w3)),
wave = 3,
indegree = degree(s3w3, mode = "in"),
outdegree = degree(s3w3, mode = "out"),
constraint = constraint(s3w3) %>% unlist())
df4w1 <- data.frame(
student_id = names(V(s4w1)),
wave = 1,
indegree = degree(s4w1, mode = "in"),
outdegree = degree(s4w1, mode = "out"),
constraint = constraint(s4w1) %>% unlist())
df4w2 <- data.frame(
student_id = names(V(s4w2)),
wave = 2,
indegree = degree(s4w2, mode = "in"),
outdegree = degree(s4w2, mode = "out"),
constraint = constraint(s4w2) %>% unlist())
df4w3 <- data.frame(
student_id = names(V(s4w3)),
wave = 3,
indegree = degree(s4w3, mode = "in"),
outdegree = degree(s4w3, mode = "out"),
constraint = constraint(s4w3) %>% unlist())
df5w1 <- data.frame(
student_id = names(V(s5w1)),
wave = 1,
indegree = degree(s5w1, mode = "in"),
outdegree = degree(s5w1, mode = "out"),
constraint = constraint(s5w1) %>% unlist())
df5w2 <- data.frame(
student_id = names(V(s5w2)),
wave = 2,
indegree = degree(s5w2, mode = "in"),
outdegree = degree(s5w2, mode = "out"),
constraint = constraint(s5w2) %>% unlist())
df5w3 <- data.frame(
student_id = names(V(s5w3)),
wave = 3,
indegree = degree(s5w3, mode = "in"),
outdegree = degree(s5w3, mode = "out"),
constraint = constraint(s5w3) %>% unlist())
df <- list(df1w1, df1w2, df1w3,
df2w1, df2w2, df2w3,
df3w1, df3w2, df3w3,
df4w1, df4w2, df4w3,
df5w1, df5w2, df5w3) %>%
reduce(full_join)
【问题讨论】:
标签: r loops tidyverse apply igraph