在R中找到导致失误(被对手拦截)的不成功传球
Finding unsuccessful pass leading to turnover (interception by opponent) in R
我试图找出每位球员导致对手失误(因此被拦截)的传球失败次数。参见type_name
和result_name
列,发生这种情况的情况在第43和46行(因此第42和45行是不成功的传球,应该计算在内)。
df1 <- structure(list(game_id = c(303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L), period_id = c(1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
time_seconds = c(0.229, 3.162, 5.996, 8.285, 12.325, 20.577,
22.06, 30.931, 32.254, 35.179, 66.245, 81.801, 96.335, 97.383,
98.807, 99.139, 101.542, 147.939, 153.847, 155.684, 161.605,
165.777, 171.044, 173.955, 204.484, 206.445, 208.583, 232.458,
233.734, 234.682, 236.246, 240.425, 241.458, 256.3, 259.524,
260.83, 264.041, 284.931, 289.491, 291.895, 293.879, 294.599,
294.993, 295.747, 298.98, 299.941, 301.387, 303.017, 304.006,
308.563), home_team = c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE,
FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE,
TRUE, TRUE, TRUE, TRUE, TRUE), team_name = c("Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Getafe", "Getafe", "Barcelona",
"Getafe", "Barcelona", "Barcelona", "Barcelona", "Getafe",
"Getafe", "Barcelona", "Getafe", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Getafe", "Getafe", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Getafe", "Getafe", "Getafe", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona"), player_name = c("Antoine Griezmann",
"Sergio Busquets i Burgos", "Sergi Roberto Carnicer", "Gerard Piqué Bernabéu",
"Samuel Yves Umtiti", "Arthur Henrique Ramos de Oliveira Melo",
"Sergio Busquets i Burgos", "Antoine Griezmann", "Arthur Henrique Ramos de Oliveira Melo",
"Sergi Roberto Carnicer", "Anssumane Fati", "Jordi Alba Ramos",
"Sergio Busquets i Burgos", "Nemanja Maksimovic", "Jaime Mata Arnaiz",
"Sergio Busquets i Burgos", "Marc Cucurella Saseta", "Antoine Griezmann",
"Anssumane Fati", "Jordi Alba Ramos", "Jorge Molina Vidal",
"Djené Dakonam Ortega", "Gerard Piqué Bernabéu", "Xabier Etxeita Gorritxategi",
"Arthur Henrique Ramos de Oliveira Melo", "Frenkie de Jong",
"Gerard Piqué Bernabéu", "Sergio Busquets i Burgos", "Samuel Yves Umtiti",
"Jordi Alba Ramos", "Samuel Yves Umtiti", "Mauro Wilney Arambarri Rosa",
"Nemanja Maksimovic", "Sergio Busquets i Burgos", "Frenkie de Jong",
"Arthur Henrique Ramos de Oliveira Melo", "Sergi Roberto Carnicer",
"Gerard Piqué Bernabéu", "Samuel Yves Umtiti", "Sergio Busquets i Burgos",
"Frenkie de Jong", "Lionel Andrés Messi Cuccittini", "Xabier Etxeita Gorritxategi",
"Jorge Molina Vidal", "Marc Cucurella Saseta", "Samuel Yves Umtiti",
"Sergio Busquets i Burgos", "Frenkie de Jong", "Antoine Griezmann",
"Frenkie de Jong"), type_name = c("pass", "pass", "pass",
"pass", "pass", "pass", "pass", "pass", "pass", "pass", "pass",
"pass", "pass", "pass", "pass", "interception", "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",
"interception", "pass", "pass", "interception", "pass", "pass",
"pass", "pass"), result_name = c("success", "success", "success",
"success", "success", "success", "success", "success", "success",
"success", "fail", "success", "fail", "success", "fail",
"fail", "success", "success", "success", "success", "success",
"success", "fail", "success", "success", "success", "success",
"success", "success", "success", "success", "success", "offside",
"success", "success", "success", "fail", "success", "success",
"success", "success", "fail", "success", "success", "fail",
"success", "success", "success", "success", "success")), row.names = c(NA,
50L), class = "data.frame")
# Output
df1
game_id period_id time_seconds home_team team_name player_name type_name result_name
1 303377 1 0.229 TRUE Barcelona Antoine Griezmann pass success
2 303377 1 3.162 TRUE Barcelona Sergio Busquets i Burgos pass success
3 303377 1 5.996 TRUE Barcelona Sergi Roberto Carnicer pass success
4 303377 1 8.285 TRUE Barcelona Gerard Piqué Bernabéu pass success
5 303377 1 12.325 TRUE Barcelona Samuel Yves Umtiti pass success
6 303377 1 20.577 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
7 303377 1 22.060 TRUE Barcelona Sergio Busquets i Burgos pass success
8 303377 1 30.931 TRUE Barcelona Antoine Griezmann pass success
9 303377 1 32.254 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
10 303377 1 35.179 TRUE Barcelona Sergi Roberto Carnicer pass success
11 303377 1 66.245 TRUE Barcelona Anssumane Fati pass fail
12 303377 1 81.801 TRUE Barcelona Jordi Alba Ramos pass success
13 303377 1 96.335 TRUE Barcelona Sergio Busquets i Burgos pass fail
14 303377 1 97.383 FALSE Getafe Nemanja Maksimovic pass success
15 303377 1 98.807 FALSE Getafe Jaime Mata Arnaiz pass fail
16 303377 1 99.139 TRUE Barcelona Sergio Busquets i Burgos interception fail
17 303377 1 101.542 FALSE Getafe Marc Cucurella Saseta pass success
18 303377 1 147.939 TRUE Barcelona Antoine Griezmann pass success
19 303377 1 153.847 TRUE Barcelona Anssumane Fati pass success
20 303377 1 155.684 TRUE Barcelona Jordi Alba Ramos pass success
21 303377 1 161.605 FALSE Getafe Jorge Molina Vidal pass success
22 303377 1 165.777 FALSE Getafe Djené Dakonam Ortega pass success
23 303377 1 171.044 TRUE Barcelona Gerard Piqué Bernabéu pass fail
24 303377 1 173.955 FALSE Getafe Xabier Etxeita Gorritxategi pass success
25 303377 1 204.484 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
26 303377 1 206.445 TRUE Barcelona Frenkie de Jong pass success
27 303377 1 208.583 TRUE Barcelona Gerard Piqué Bernabéu pass success
28 303377 1 232.458 TRUE Barcelona Sergio Busquets i Burgos pass success
29 303377 1 233.734 TRUE Barcelona Samuel Yves Umtiti pass success
30 303377 1 234.682 TRUE Barcelona Jordi Alba Ramos pass success
31 303377 1 236.246 TRUE Barcelona Samuel Yves Umtiti pass success
32 303377 1 240.425 FALSE Getafe Mauro Wilney Arambarri Rosa pass success
33 303377 1 241.458 FALSE Getafe Nemanja Maksimovic pass offside
34 303377 1 256.300 TRUE Barcelona Sergio Busquets i Burgos pass success
35 303377 1 259.524 TRUE Barcelona Frenkie de Jong pass success
36 303377 1 260.830 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
37 303377 1 264.041 TRUE Barcelona Sergi Roberto Carnicer pass fail
38 303377 1 284.931 TRUE Barcelona Gerard Piqué Bernabéu pass success
39 303377 1 289.491 TRUE Barcelona Samuel Yves Umtiti pass success
40 303377 1 291.895 TRUE Barcelona Sergio Busquets i Burgos pass success
41 303377 1 293.879 TRUE Barcelona Frenkie de Jong pass success
42 303377 1 294.599 TRUE Barcelona Lionel Andrés Messi Cuccittini pass fail
43 303377 1 294.993 FALSE Getafe Xabier Etxeita Gorritxategi interception success
44 303377 1 295.747 FALSE Getafe Jorge Molina Vidal pass success
45 303377 1 298.980 FALSE Getafe Marc Cucurella Saseta pass fail
46 303377 1 299.941 TRUE Barcelona Samuel Yves Umtiti interception success
47 303377 1 301.387 TRUE Barcelona Sergio Busquets i Burgos pass success
48 303377 1 303.017 TRUE Barcelona Frenkie de Jong pass success
49 303377 1 304.006 TRUE Barcelona Antoine Griezmann pass success
50 303377 1 308.563 TRUE Barcelona Frenkie de Jong pass success
我目前正在尝试通过 data table
方法解决此问题,但我检索到太多 TRUE 值(每次通过失败都会导致拦截,但如果这些拦截具有 result_name == fail
,那么他们不应该算):
# Make it a data.table
setDT(df1)
# Create an id-column
df1[, rowid := .I]
# Set id column as key
setkey(df1, rowid)
# Create temp data.table with all succesfull interceptions
dt.intercept.success <- df1[type_name == "interception" & result_name == "success", ]
# perform join on all failed passes
df2 <- df1[df1[type_name == "pass" & result_name == "fail", ], fail_pass_turnover := {
temp <- dt.intercept.success[!home_team == i.home_team &
game_id == i.game_id &
period_id == i.period_id, ]
list(nrow(temp) > 0)
}, by = .EACHI][]
# output
game_id period_id time_seconds home_team team_name player_name type_name result_name
1: 303377 1 0.229 TRUE Barcelona Antoine Griezmann pass success
2: 303377 1 3.162 TRUE Barcelona Sergio Busquets i Burgos pass success
3: 303377 1 5.996 TRUE Barcelona Sergi Roberto Carnicer pass success
4: 303377 1 8.285 TRUE Barcelona Gerard Piqué Bernabéu pass success
5: 303377 1 12.325 TRUE Barcelona Samuel Yves Umtiti pass success
6: 303377 1 20.577 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
7: 303377 1 22.060 TRUE Barcelona Sergio Busquets i Burgos pass success
8: 303377 1 30.931 TRUE Barcelona Antoine Griezmann pass success
9: 303377 1 32.254 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
10: 303377 1 35.179 TRUE Barcelona Sergi Roberto Carnicer pass success
11: 303377 1 66.245 TRUE Barcelona Anssumane Fati pass fail
12: 303377 1 81.801 TRUE Barcelona Jordi Alba Ramos pass success
13: 303377 1 96.335 TRUE Barcelona Sergio Busquets i Burgos pass fail
14: 303377 1 97.383 FALSE Getafe Nemanja Maksimovic pass success
15: 303377 1 98.807 FALSE Getafe Jaime Mata Arnaiz pass fail
16: 303377 1 99.139 TRUE Barcelona Sergio Busquets i Burgos interception fail
17: 303377 1 101.542 FALSE Getafe Marc Cucurella Saseta pass success
18: 303377 1 147.939 TRUE Barcelona Antoine Griezmann pass success
19: 303377 1 153.847 TRUE Barcelona Anssumane Fati pass success
20: 303377 1 155.684 TRUE Barcelona Jordi Alba Ramos pass success
21: 303377 1 161.605 FALSE Getafe Jorge Molina Vidal pass success
22: 303377 1 165.777 FALSE Getafe Djené Dakonam Ortega pass success
23: 303377 1 171.044 TRUE Barcelona Gerard Piqué Bernabéu pass fail
24: 303377 1 173.955 FALSE Getafe Xabier Etxeita Gorritxategi pass success
25: 303377 1 204.484 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
26: 303377 1 206.445 TRUE Barcelona Frenkie de Jong pass success
27: 303377 1 208.583 TRUE Barcelona Gerard Piqué Bernabéu pass success
28: 303377 1 232.458 TRUE Barcelona Sergio Busquets i Burgos pass success
29: 303377 1 233.734 TRUE Barcelona Samuel Yves Umtiti pass success
30: 303377 1 234.682 TRUE Barcelona Jordi Alba Ramos pass success
31: 303377 1 236.246 TRUE Barcelona Samuel Yves Umtiti pass success
32: 303377 1 240.425 FALSE Getafe Mauro Wilney Arambarri Rosa pass success
33: 303377 1 241.458 FALSE Getafe Nemanja Maksimovic pass offside
34: 303377 1 256.300 TRUE Barcelona Sergio Busquets i Burgos pass success
35: 303377 1 259.524 TRUE Barcelona Frenkie de Jong pass success
36: 303377 1 260.830 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
37: 303377 1 264.041 TRUE Barcelona Sergi Roberto Carnicer pass fail
38: 303377 1 284.931 TRUE Barcelona Gerard Piqué Bernabéu pass success
39: 303377 1 289.491 TRUE Barcelona Samuel Yves Umtiti pass success
40: 303377 1 291.895 TRUE Barcelona Sergio Busquets i Burgos pass success
41: 303377 1 293.879 TRUE Barcelona Frenkie de Jong pass success
42: 303377 1 294.599 TRUE Barcelona Lionel Andrés Messi Cuccittini pass fail
43: 303377 1 294.993 FALSE Getafe Xabier Etxeita Gorritxategi interception success
44: 303377 1 295.747 FALSE Getafe Jorge Molina Vidal pass success
45: 303377 1 298.980 FALSE Getafe Marc Cucurella Saseta pass fail
46: 303377 1 299.941 TRUE Barcelona Samuel Yves Umtiti interception success
47: 303377 1 301.387 TRUE Barcelona Sergio Busquets i Burgos pass success
48: 303377 1 303.017 TRUE Barcelona Frenkie de Jong pass success
49: 303377 1 304.006 TRUE Barcelona Antoine Griezmann pass success
50: 303377 1 308.563 TRUE Barcelona Frenkie de Jong pass success
1: 1 NA
2: 2 NA
3: 3 NA
4: 4 NA
5: 5 NA
6: 6 NA
7: 7 NA
8: 8 NA
9: 9 NA
10: 10 NA
11: 11 TRUE
12: 12 NA
13: 13 TRUE
14: 14 NA
15: 15 TRUE
16: 16 NA
17: 17 NA
18: 18 NA
19: 19 NA
20: 20 NA
21: 21 NA
22: 22 NA
23: 23 TRUE
24: 24 NA
25: 25 NA
26: 26 NA
27: 27 NA
28: 28 NA
29: 29 NA
30: 30 NA
31: 31 NA
32: 32 NA
33: 33 NA
34: 34 NA
35: 35 NA
36: 36 NA
37: 37 TRUE
38: 38 NA
39: 39 NA
40: 40 NA
41: 41 NA
42: 42 TRUE
43: 43 NA
44: 44 NA
45: 45 TRUE
46: 46 NA
47: 47 NA
48: 48 NA
49: 49 NA
50: 50 NA
总而言之:值 TRUE 应该只出现在第 42 和 45 行,因为这些失败的传球导致对手成功拦截。
这里有一个 tidyverse
您也可以使用的解决方案:
library(dplyr)
df1 %>%
mutate(to_turnover = ifelse((type_name == "pass" & result_name == "fail") &
(lead(type_name) == "interception" & lead(result_name) == "success"),
TRUE, NA))
这里有一个data.table
方法
library(data.table)
setDT(df1)
df1[type_name == "pass" &
result_name == "fail" &
shift(type_name, type = "lead") == "interception" &
shift(result_name, type = "lead") == "success",
to_turnover := TRUE]
我试图找出每位球员导致对手失误(因此被拦截)的传球失败次数。参见type_name
和result_name
列,发生这种情况的情况在第43和46行(因此第42和45行是不成功的传球,应该计算在内)。
df1 <- structure(list(game_id = c(303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L, 303377L, 303377L, 303377L,
303377L, 303377L, 303377L, 303377L), period_id = c(1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
time_seconds = c(0.229, 3.162, 5.996, 8.285, 12.325, 20.577,
22.06, 30.931, 32.254, 35.179, 66.245, 81.801, 96.335, 97.383,
98.807, 99.139, 101.542, 147.939, 153.847, 155.684, 161.605,
165.777, 171.044, 173.955, 204.484, 206.445, 208.583, 232.458,
233.734, 234.682, 236.246, 240.425, 241.458, 256.3, 259.524,
260.83, 264.041, 284.931, 289.491, 291.895, 293.879, 294.599,
294.993, 295.747, 298.98, 299.941, 301.387, 303.017, 304.006,
308.563), home_team = c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE,
FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE,
TRUE, TRUE, TRUE, TRUE, TRUE), team_name = c("Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Getafe", "Getafe", "Barcelona",
"Getafe", "Barcelona", "Barcelona", "Barcelona", "Getafe",
"Getafe", "Barcelona", "Getafe", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Getafe", "Getafe", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona", "Barcelona", "Barcelona",
"Barcelona", "Getafe", "Getafe", "Getafe", "Barcelona", "Barcelona",
"Barcelona", "Barcelona", "Barcelona"), player_name = c("Antoine Griezmann",
"Sergio Busquets i Burgos", "Sergi Roberto Carnicer", "Gerard Piqué Bernabéu",
"Samuel Yves Umtiti", "Arthur Henrique Ramos de Oliveira Melo",
"Sergio Busquets i Burgos", "Antoine Griezmann", "Arthur Henrique Ramos de Oliveira Melo",
"Sergi Roberto Carnicer", "Anssumane Fati", "Jordi Alba Ramos",
"Sergio Busquets i Burgos", "Nemanja Maksimovic", "Jaime Mata Arnaiz",
"Sergio Busquets i Burgos", "Marc Cucurella Saseta", "Antoine Griezmann",
"Anssumane Fati", "Jordi Alba Ramos", "Jorge Molina Vidal",
"Djené Dakonam Ortega", "Gerard Piqué Bernabéu", "Xabier Etxeita Gorritxategi",
"Arthur Henrique Ramos de Oliveira Melo", "Frenkie de Jong",
"Gerard Piqué Bernabéu", "Sergio Busquets i Burgos", "Samuel Yves Umtiti",
"Jordi Alba Ramos", "Samuel Yves Umtiti", "Mauro Wilney Arambarri Rosa",
"Nemanja Maksimovic", "Sergio Busquets i Burgos", "Frenkie de Jong",
"Arthur Henrique Ramos de Oliveira Melo", "Sergi Roberto Carnicer",
"Gerard Piqué Bernabéu", "Samuel Yves Umtiti", "Sergio Busquets i Burgos",
"Frenkie de Jong", "Lionel Andrés Messi Cuccittini", "Xabier Etxeita Gorritxategi",
"Jorge Molina Vidal", "Marc Cucurella Saseta", "Samuel Yves Umtiti",
"Sergio Busquets i Burgos", "Frenkie de Jong", "Antoine Griezmann",
"Frenkie de Jong"), type_name = c("pass", "pass", "pass",
"pass", "pass", "pass", "pass", "pass", "pass", "pass", "pass",
"pass", "pass", "pass", "pass", "interception", "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",
"interception", "pass", "pass", "interception", "pass", "pass",
"pass", "pass"), result_name = c("success", "success", "success",
"success", "success", "success", "success", "success", "success",
"success", "fail", "success", "fail", "success", "fail",
"fail", "success", "success", "success", "success", "success",
"success", "fail", "success", "success", "success", "success",
"success", "success", "success", "success", "success", "offside",
"success", "success", "success", "fail", "success", "success",
"success", "success", "fail", "success", "success", "fail",
"success", "success", "success", "success", "success")), row.names = c(NA,
50L), class = "data.frame")
# Output
df1
game_id period_id time_seconds home_team team_name player_name type_name result_name
1 303377 1 0.229 TRUE Barcelona Antoine Griezmann pass success
2 303377 1 3.162 TRUE Barcelona Sergio Busquets i Burgos pass success
3 303377 1 5.996 TRUE Barcelona Sergi Roberto Carnicer pass success
4 303377 1 8.285 TRUE Barcelona Gerard Piqué Bernabéu pass success
5 303377 1 12.325 TRUE Barcelona Samuel Yves Umtiti pass success
6 303377 1 20.577 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
7 303377 1 22.060 TRUE Barcelona Sergio Busquets i Burgos pass success
8 303377 1 30.931 TRUE Barcelona Antoine Griezmann pass success
9 303377 1 32.254 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
10 303377 1 35.179 TRUE Barcelona Sergi Roberto Carnicer pass success
11 303377 1 66.245 TRUE Barcelona Anssumane Fati pass fail
12 303377 1 81.801 TRUE Barcelona Jordi Alba Ramos pass success
13 303377 1 96.335 TRUE Barcelona Sergio Busquets i Burgos pass fail
14 303377 1 97.383 FALSE Getafe Nemanja Maksimovic pass success
15 303377 1 98.807 FALSE Getafe Jaime Mata Arnaiz pass fail
16 303377 1 99.139 TRUE Barcelona Sergio Busquets i Burgos interception fail
17 303377 1 101.542 FALSE Getafe Marc Cucurella Saseta pass success
18 303377 1 147.939 TRUE Barcelona Antoine Griezmann pass success
19 303377 1 153.847 TRUE Barcelona Anssumane Fati pass success
20 303377 1 155.684 TRUE Barcelona Jordi Alba Ramos pass success
21 303377 1 161.605 FALSE Getafe Jorge Molina Vidal pass success
22 303377 1 165.777 FALSE Getafe Djené Dakonam Ortega pass success
23 303377 1 171.044 TRUE Barcelona Gerard Piqué Bernabéu pass fail
24 303377 1 173.955 FALSE Getafe Xabier Etxeita Gorritxategi pass success
25 303377 1 204.484 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
26 303377 1 206.445 TRUE Barcelona Frenkie de Jong pass success
27 303377 1 208.583 TRUE Barcelona Gerard Piqué Bernabéu pass success
28 303377 1 232.458 TRUE Barcelona Sergio Busquets i Burgos pass success
29 303377 1 233.734 TRUE Barcelona Samuel Yves Umtiti pass success
30 303377 1 234.682 TRUE Barcelona Jordi Alba Ramos pass success
31 303377 1 236.246 TRUE Barcelona Samuel Yves Umtiti pass success
32 303377 1 240.425 FALSE Getafe Mauro Wilney Arambarri Rosa pass success
33 303377 1 241.458 FALSE Getafe Nemanja Maksimovic pass offside
34 303377 1 256.300 TRUE Barcelona Sergio Busquets i Burgos pass success
35 303377 1 259.524 TRUE Barcelona Frenkie de Jong pass success
36 303377 1 260.830 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
37 303377 1 264.041 TRUE Barcelona Sergi Roberto Carnicer pass fail
38 303377 1 284.931 TRUE Barcelona Gerard Piqué Bernabéu pass success
39 303377 1 289.491 TRUE Barcelona Samuel Yves Umtiti pass success
40 303377 1 291.895 TRUE Barcelona Sergio Busquets i Burgos pass success
41 303377 1 293.879 TRUE Barcelona Frenkie de Jong pass success
42 303377 1 294.599 TRUE Barcelona Lionel Andrés Messi Cuccittini pass fail
43 303377 1 294.993 FALSE Getafe Xabier Etxeita Gorritxategi interception success
44 303377 1 295.747 FALSE Getafe Jorge Molina Vidal pass success
45 303377 1 298.980 FALSE Getafe Marc Cucurella Saseta pass fail
46 303377 1 299.941 TRUE Barcelona Samuel Yves Umtiti interception success
47 303377 1 301.387 TRUE Barcelona Sergio Busquets i Burgos pass success
48 303377 1 303.017 TRUE Barcelona Frenkie de Jong pass success
49 303377 1 304.006 TRUE Barcelona Antoine Griezmann pass success
50 303377 1 308.563 TRUE Barcelona Frenkie de Jong pass success
我目前正在尝试通过 data table
方法解决此问题,但我检索到太多 TRUE 值(每次通过失败都会导致拦截,但如果这些拦截具有 result_name == fail
,那么他们不应该算):
# Make it a data.table
setDT(df1)
# Create an id-column
df1[, rowid := .I]
# Set id column as key
setkey(df1, rowid)
# Create temp data.table with all succesfull interceptions
dt.intercept.success <- df1[type_name == "interception" & result_name == "success", ]
# perform join on all failed passes
df2 <- df1[df1[type_name == "pass" & result_name == "fail", ], fail_pass_turnover := {
temp <- dt.intercept.success[!home_team == i.home_team &
game_id == i.game_id &
period_id == i.period_id, ]
list(nrow(temp) > 0)
}, by = .EACHI][]
# output
game_id period_id time_seconds home_team team_name player_name type_name result_name
1: 303377 1 0.229 TRUE Barcelona Antoine Griezmann pass success
2: 303377 1 3.162 TRUE Barcelona Sergio Busquets i Burgos pass success
3: 303377 1 5.996 TRUE Barcelona Sergi Roberto Carnicer pass success
4: 303377 1 8.285 TRUE Barcelona Gerard Piqué Bernabéu pass success
5: 303377 1 12.325 TRUE Barcelona Samuel Yves Umtiti pass success
6: 303377 1 20.577 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
7: 303377 1 22.060 TRUE Barcelona Sergio Busquets i Burgos pass success
8: 303377 1 30.931 TRUE Barcelona Antoine Griezmann pass success
9: 303377 1 32.254 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
10: 303377 1 35.179 TRUE Barcelona Sergi Roberto Carnicer pass success
11: 303377 1 66.245 TRUE Barcelona Anssumane Fati pass fail
12: 303377 1 81.801 TRUE Barcelona Jordi Alba Ramos pass success
13: 303377 1 96.335 TRUE Barcelona Sergio Busquets i Burgos pass fail
14: 303377 1 97.383 FALSE Getafe Nemanja Maksimovic pass success
15: 303377 1 98.807 FALSE Getafe Jaime Mata Arnaiz pass fail
16: 303377 1 99.139 TRUE Barcelona Sergio Busquets i Burgos interception fail
17: 303377 1 101.542 FALSE Getafe Marc Cucurella Saseta pass success
18: 303377 1 147.939 TRUE Barcelona Antoine Griezmann pass success
19: 303377 1 153.847 TRUE Barcelona Anssumane Fati pass success
20: 303377 1 155.684 TRUE Barcelona Jordi Alba Ramos pass success
21: 303377 1 161.605 FALSE Getafe Jorge Molina Vidal pass success
22: 303377 1 165.777 FALSE Getafe Djené Dakonam Ortega pass success
23: 303377 1 171.044 TRUE Barcelona Gerard Piqué Bernabéu pass fail
24: 303377 1 173.955 FALSE Getafe Xabier Etxeita Gorritxategi pass success
25: 303377 1 204.484 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
26: 303377 1 206.445 TRUE Barcelona Frenkie de Jong pass success
27: 303377 1 208.583 TRUE Barcelona Gerard Piqué Bernabéu pass success
28: 303377 1 232.458 TRUE Barcelona Sergio Busquets i Burgos pass success
29: 303377 1 233.734 TRUE Barcelona Samuel Yves Umtiti pass success
30: 303377 1 234.682 TRUE Barcelona Jordi Alba Ramos pass success
31: 303377 1 236.246 TRUE Barcelona Samuel Yves Umtiti pass success
32: 303377 1 240.425 FALSE Getafe Mauro Wilney Arambarri Rosa pass success
33: 303377 1 241.458 FALSE Getafe Nemanja Maksimovic pass offside
34: 303377 1 256.300 TRUE Barcelona Sergio Busquets i Burgos pass success
35: 303377 1 259.524 TRUE Barcelona Frenkie de Jong pass success
36: 303377 1 260.830 TRUE Barcelona Arthur Henrique Ramos de Oliveira Melo pass success
37: 303377 1 264.041 TRUE Barcelona Sergi Roberto Carnicer pass fail
38: 303377 1 284.931 TRUE Barcelona Gerard Piqué Bernabéu pass success
39: 303377 1 289.491 TRUE Barcelona Samuel Yves Umtiti pass success
40: 303377 1 291.895 TRUE Barcelona Sergio Busquets i Burgos pass success
41: 303377 1 293.879 TRUE Barcelona Frenkie de Jong pass success
42: 303377 1 294.599 TRUE Barcelona Lionel Andrés Messi Cuccittini pass fail
43: 303377 1 294.993 FALSE Getafe Xabier Etxeita Gorritxategi interception success
44: 303377 1 295.747 FALSE Getafe Jorge Molina Vidal pass success
45: 303377 1 298.980 FALSE Getafe Marc Cucurella Saseta pass fail
46: 303377 1 299.941 TRUE Barcelona Samuel Yves Umtiti interception success
47: 303377 1 301.387 TRUE Barcelona Sergio Busquets i Burgos pass success
48: 303377 1 303.017 TRUE Barcelona Frenkie de Jong pass success
49: 303377 1 304.006 TRUE Barcelona Antoine Griezmann pass success
50: 303377 1 308.563 TRUE Barcelona Frenkie de Jong pass success
1: 1 NA
2: 2 NA
3: 3 NA
4: 4 NA
5: 5 NA
6: 6 NA
7: 7 NA
8: 8 NA
9: 9 NA
10: 10 NA
11: 11 TRUE
12: 12 NA
13: 13 TRUE
14: 14 NA
15: 15 TRUE
16: 16 NA
17: 17 NA
18: 18 NA
19: 19 NA
20: 20 NA
21: 21 NA
22: 22 NA
23: 23 TRUE
24: 24 NA
25: 25 NA
26: 26 NA
27: 27 NA
28: 28 NA
29: 29 NA
30: 30 NA
31: 31 NA
32: 32 NA
33: 33 NA
34: 34 NA
35: 35 NA
36: 36 NA
37: 37 TRUE
38: 38 NA
39: 39 NA
40: 40 NA
41: 41 NA
42: 42 TRUE
43: 43 NA
44: 44 NA
45: 45 TRUE
46: 46 NA
47: 47 NA
48: 48 NA
49: 49 NA
50: 50 NA
总而言之:值 TRUE 应该只出现在第 42 和 45 行,因为这些失败的传球导致对手成功拦截。
这里有一个 tidyverse
您也可以使用的解决方案:
library(dplyr)
df1 %>%
mutate(to_turnover = ifelse((type_name == "pass" & result_name == "fail") &
(lead(type_name) == "interception" & lead(result_name) == "success"),
TRUE, NA))
这里有一个data.table
方法
library(data.table)
setDT(df1)
df1[type_name == "pass" &
result_name == "fail" &
shift(type_name, type = "lead") == "interception" &
shift(result_name, type = "lead") == "success",
to_turnover := TRUE]