【发布时间】:2021-05-05 22:02:53
【问题描述】:
我创建了这个 50 行的示例数据框。
pass_subset <- structure(list(player_name = c("Nemanja Maksimovic", "Jaime Mata Arnaiz",
"Marc Cucurella Saseta", "Jorge Molina Vidal", "Djené Dakonam Ortega",
"Xabier Etxeita Gorritxategi", "Mauro Wilney Arambarri Rosa",
"Nemanja Maksimovic", "Jorge Molina Vidal", "Marc Cucurella Saseta",
"Djené Dakonam Ortega", "Nemanja Maksimovic", "Allan Romeo Nyom",
"Jorge Molina Vidal", "Allan Romeo Nyom", "Mauro Wilney Arambarri Rosa",
"Oghenekaro Etebo", "Djené Dakonam Ortega", "Oghenekaro Etebo",
"Jorge Molina Vidal", "Mathías Olivera Miramontes", "Marc Cucurella Saseta",
"Jorge Molina Vidal", "Marc Cucurella Saseta", "Marc Cucurella Saseta",
"Jorge Molina Vidal", "Mathías Olivera Miramontes", "Mathías Olivera Miramontes",
"Nemanja Maksimovic", "Mauro Wilney Arambarri Rosa", "Xabier Etxeita Gorritxategi",
"Jorge Molina Vidal", "Mathías Olivera Miramontes", "Oghenekaro Etebo",
"Nemanja Maksimovic", "Jaime Mata Arnaiz", "Marc Cucurella Saseta",
"Djené Dakonam Ortega", "Mauro Wilney Arambarri Rosa", "Oghenekaro Etebo",
"Mauro Wilney Arambarri Rosa", "Nemanja Maksimovic", "Djené Dakonam Ortega",
"Djené Dakonam Ortega", "Jaime Mata Arnaiz", "Djené Dakonam Ortega",
"Marc Cucurella Saseta", "Jorge Molina Vidal", "Jaime Mata Arnaiz",
"Jorge Molina Vidal"), receive_player = c("Jaime Mata Arnaiz",
"Jorge Molina Vidal", "Jaime Mata Arnaiz", "Mauro Wilney Arambarri Rosa",
"David Soria Solís", "Marc Cucurella Saseta", "Nemanja Maksimovic",
"Jorge Molina Vidal", "Marc Cucurella Saseta", "Jorge Molina Vidal",
"Jorge Molina Vidal", "Jaime Mata Arnaiz", "Jorge Molina Vidal",
"Nemanja Maksimovic", "Mauro Wilney Arambarri Rosa", "Oghenekaro Etebo",
"Djené Dakonam Ortega", "David Soria Solís", "David Soria Solís",
"Jaime Mata Arnaiz", "Marc Cucurella Saseta", "Jorge Molina Vidal",
"Mathías Olivera Miramontes", "Jaime Mata Arnaiz", "Jorge Molina Vidal",
"Mathías Olivera Miramontes", "Marc Cucurella Saseta", "Nemanja Maksimovic",
"Mauro Wilney Arambarri Rosa", "Jorge Molina Vidal", "Jorge Molina Vidal",
"Mauro Wilney Arambarri Rosa", "Oghenekaro Etebo", "Jaime Mata Arnaiz",
"Jaime Mata Arnaiz", "Marc Cucurella Saseta", "Jaime Mata Arnaiz",
"David Soria Solís", "Oghenekaro Etebo", "Mauro Wilney Arambarri Rosa",
"Xabier Etxeita Gorritxategi", "David Soria Solís", "Jaime Mata Arnaiz",
"Mathías Olivera Miramontes", "Jorge Molina Vidal", "Marc Cucurella Saseta",
"Jorge Molina Vidal", "Jaime Mata Arnaiz", "Marc Cucurella Saseta",
"Nemanja Maksimovic"), type_name = c("pass", "pass", "pass",
"pass", "pass", "pass", "pass", "pass", "pass", "pass", "pass",
"pass", "pass", "pass", "pass", "pass", "pass", "pass", "pass",
"pass", "pass", "pass", "pass", "pass", "pass", "pass", "pass",
"pass", "pass", "pass", "pass", "pass", "pass", "pass", "pass",
"pass", "pass", "pass", "pass", "pass", "pass", "pass", "pass",
"pass", "pass", "pass", "pass", "pass", "pass", "pass"), no_passes = c(1,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50)), row.names = c(6L,
8L, 10L, 15L, 17L, 19L, 25L, 26L, 29L, 31L, 33L, 34L, 35L, 37L,
40L, 42L, 44L, 46L, 49L, 50L, 53L, 55L, 57L, 60L, 67L, 69L, 71L,
74L, 76L, 78L, 79L, 81L, 87L, 89L, 91L, 93L, 95L, 96L, 98L, 100L,
102L, 108L, 110L, 112L, 116L, 121L, 122L, 124L, 126L, 131L), class = "data.frame")
输出
player_name receive_player type_name no_passes
6 Nemanja Maksimovic Jaime Mata Arnaiz pass 1
8 Jaime Mata Arnaiz Jorge Molina Vidal pass 2
10 Marc Cucurella Saseta Jaime Mata Arnaiz pass 3
15 Jorge Molina Vidal Mauro Wilney Arambarri Rosa pass 4
17 Djené Dakonam Ortega David Soria Solís pass 5
19 Xabier Etxeita Gorritxategi Marc Cucurella Saseta pass 6
25 Mauro Wilney Arambarri Rosa Nemanja Maksimovic pass 7
26 Nemanja Maksimovic Jorge Molina Vidal pass 8
29 Jorge Molina Vidal Marc Cucurella Saseta pass 9
31 Marc Cucurella Saseta Jorge Molina Vidal pass 10
33 Djené Dakonam Ortega Jorge Molina Vidal pass 11
34 Nemanja Maksimovic Jaime Mata Arnaiz pass 12
35 Allan Romeo Nyom Jorge Molina Vidal pass 13
37 Jorge Molina Vidal Nemanja Maksimovic pass 14
40 Allan Romeo Nyom Mauro Wilney Arambarri Rosa pass 15
42 Mauro Wilney Arambarri Rosa Oghenekaro Etebo pass 16
44 Oghenekaro Etebo Djené Dakonam Ortega pass 17
46 Djené Dakonam Ortega David Soria Solís pass 18
49 Oghenekaro Etebo David Soria Solís pass 19
50 Jorge Molina Vidal Jaime Mata Arnaiz pass 20
53 Mathías Olivera Miramontes Marc Cucurella Saseta pass 21
55 Marc Cucurella Saseta Jorge Molina Vidal pass 22
57 Jorge Molina Vidal Mathías Olivera Miramontes pass 23
60 Marc Cucurella Saseta Jaime Mata Arnaiz pass 24
67 Marc Cucurella Saseta Jorge Molina Vidal pass 25
69 Jorge Molina Vidal Mathías Olivera Miramontes pass 26
71 Mathías Olivera Miramontes Marc Cucurella Saseta pass 27
74 Mathías Olivera Miramontes Nemanja Maksimovic pass 28
76 Nemanja Maksimovic Mauro Wilney Arambarri Rosa pass 29
78 Mauro Wilney Arambarri Rosa Jorge Molina Vidal pass 30
79 Xabier Etxeita Gorritxategi Jorge Molina Vidal pass 31
81 Jorge Molina Vidal Mauro Wilney Arambarri Rosa pass 32
87 Mathías Olivera Miramontes Oghenekaro Etebo pass 33
89 Oghenekaro Etebo Jaime Mata Arnaiz pass 34
91 Nemanja Maksimovic Jaime Mata Arnaiz pass 35
93 Jaime Mata Arnaiz Marc Cucurella Saseta pass 36
95 Marc Cucurella Saseta Jaime Mata Arnaiz pass 37
96 Djené Dakonam Ortega David Soria Solís pass 38
98 Mauro Wilney Arambarri Rosa Oghenekaro Etebo pass 39
100 Oghenekaro Etebo Mauro Wilney Arambarri Rosa pass 40
102 Mauro Wilney Arambarri Rosa Xabier Etxeita Gorritxategi pass 41
108 Nemanja Maksimovic David Soria Solís pass 42
110 Djené Dakonam Ortega Jaime Mata Arnaiz pass 43
112 Djené Dakonam Ortega Mathías Olivera Miramontes pass 44
116 Jaime Mata Arnaiz Jorge Molina Vidal pass 45
121 Djené Dakonam Ortega Marc Cucurella Saseta pass 46
122 Marc Cucurella Saseta Jorge Molina Vidal pass 47
124 Jorge Molina Vidal Jaime Mata Arnaiz pass 48
126 Jaime Mata Arnaiz Marc Cucurella Saseta pass 49
131 Jorge Molina Vidal Nemanja Maksimovic pass 50
每行包含一名球员,该球员传球给另一名球员。在这个 df 中,我想在玩家之间创建一个 20 行(行 1:20,因此 20 次传球)的较小框架,并计算网络指标,例如度数、介数、接近中心性和聚类系数。
计算出指标后,值应保存在数据框中(即示例中的temporal_network_AT)。
我想迭代这个过程,删除第一遍并添加第 21 遍。因此,新窗口包含 2:21 行。对于这些行,我想再次计算网络指标。
此过程必须迭代,直到给出最后一遍(在示例中的第 50 行中给出)。
我创建了以下 for 循环来尝试解决问题:
temporal_network_AT <- data.frame()
# Create the windows for the AT
for(j in 1:nrow(pass_subset)){
# 1: Grab first 20 passes starting from j
passes_j <- pass_subset[j:20,]
# 2: Calculate the metrics for this window
gPass_AT <- graph_from_data_frame(passes_j)
## Individual stats
# 2a: Clustering Coefficient
clustCoeff <- igraph::transitivity(gPass_AT)
# 2b: degree centrality
degree <- igraph::centralization.degree(gPass_AT)$centralization
# 2d: Betweenness Centrality
betweenness <- igraph::betweenness(gPass_AT)
# 2e: Closeness Centrality
closeness <- igraph::closeness(gPass_AT)
# 2f: Eigenvector centrality // page_rank
eigenvector <- igraph::evcent(gPass_AT)$vector
# 3: Store values in df
temporal_network_AT <- as.data.frame(cbind(clustCoeff, degree, betweenness, closeness, eigenvector))
setDT(temporal_network_AT, keep.rownames=TRUE)
colnames(temporal_network_AT)[1] <- "Player"
temporal_network_AT$passnetwork <- paste0(j, "_passes")
j <- j + 1
}
## Current Output:
Player transitivity degree betweenness closeness eigenvector passnetwork
1: Jorge Molina Vidal 0.5 0.3580247 28.800000 0.04545455 0.99930139 50_passes
2: Jaime Mata Arnaiz 0.5 0.3580247 7.183333 0.03703704 0.95503552 50_passes
3: Marc Cucurella Saseta 0.5 0.3580247 3.416667 0.03703704 1.00000000 50_passes
4: Djené Dakonam Ortega 0.5 0.3580247 0.000000 0.05882353 0.31609207 50_passes
5: Nemanja Maksimovic 0.5 0.3580247 8.500000 0.04166667 0.36036641 50_passes
6: Mauro Wilney Arambarri Rosa 0.5 0.3580247 12.333333 0.04000000 0.36921736 50_passes
7: Oghenekaro Etebo 0.5 0.3580247 2.033333 0.03571429 0.27490330 50_passes
8: Mathías Olivera Miramontes 0.5 0.3580247 6.733333 0.04166667 0.59469541 50_passes
9: Xabier Etxeita Gorritxategi 0.5 0.3580247 0.000000 0.03571429 0.16441569 50_passes
10: David Soria Solís 0.5 0.3580247 0.000000 0.01111111 0.08127063 50_passes
但是,我现在陷入了实际的迭代中。我只检索最后一遍的输出(即第 50 遍)。
所以我想要的是:
-
从第 1:20 行的 df 开始,
-
计算参数,
-
将它们存储在现有数据框
temporal_network_AT, -
a 创建一个包含 2:21 等行的新框架
-
重新计算参数,
-
在现有数据帧“temporal_network_AT”中附加新参数
-
创建具有 3:22 行的新框架
重复
有没有人可以帮助我?
更新
我设法使用以下代码检索了一个包含所有值的列表:
# Create the windows for the AT
for(j in 1:nrow(pass_subset)){
# 1: Grab first 20 passes starting from j
passes_j <- pass_subset[c(j, j+1, j+2, j+3, j+4, j+5, j+6, j+7, j+8, j+9, j+10,
j+11, j+12, j+13, j+14, j+15, j+16, j+17, j+18, j+19),]
# 2: Calculate the metrics for this window
gPass_AT <- graph_from_data_frame(passes_j)
## Individual stats
# 2a: Clustering Coefficient
clustCoeff <- igraph::transitivity(gPass_AT)
# 2b: degree centrality
degree <- igraph::centralization.degree(gPass_AT)$centralization
# 2d: Betweenness Centrality
betweenness <- igraph::betweenness(gPass_AT)
# 2e: Closeness Centrality
closeness <- igraph::closeness(gPass_AT)
# 2f: Eigenvector centrality // page_rank
eigenvector <- igraph::evcent(gPass_AT)$vector
# 3: Store values in df
temporal_network_AT <- as.data.frame(cbind(transitivity, degree, betweenness, closeness, eigenvector))
setDT(temporal_network_AT, keep.rownames=TRUE)
colnames(temporal_network_AT)[1] <- "Player"
temporal_network_AT$passnetwork <- paste0(j, "_passes")
datalist[[j]] <- temporal_network_AT
j <- j + 1
}
big_data <- do.call(rbind, datalist)
但是,当前列表包含 50 个条目,而列表应包含 30 个条目(从 1:20 到 30:50)。因此,当测量到第 50 次时,迭代实际上应该停止。它现在所做的是继续(31:50、32:50、33:50 等)。
【问题讨论】:
-
预期结果将是一个数据帧,其中相同的玩家使用各自的参数和
passnetwork增量(20 次通行证到 50 通行证)被 rbined 30 次 -
我明白了。这实际上是一个非常复杂的问题..我会尝试改写
-
糟糕,我将
transitivity更改为clustCoeff。我会改的
标签: r