# Pour les explications sur le Quasi-experimental Plus/Minus, voir: http://vincentberthet.com/introducing-quasi-experimental-plusminus-qepm/

Abréviations

#TP: Target Player
#CP: Compared Player
#T: Team (of TP or CP)
#O: team Opponent
#l: lineup

On load le fichier brut

# The raw data file can be downloaded on BasketballValue. Go to: "Downloads", "2007-2008" (for instance), and download the folder "List of each matchup of one unit against another". In the folder, the file is "matchups20072008reg20081211.text". Open the file and save it in csv format.

rm(list=ls())

d <- read.csv2 (file.choose())
head(d)
##           GameID StartTime  EndTime ElapsedTime ElapsedSecs HomePlayer1ID
## 1 20071030HOULAL  00:00:01 00:00:00    00:00:01           1           189
## 2 20071030HOULAL  00:00:02 00:00:01    00:00:01           1           189
## 3 20071030HOULAL  00:01:32 00:00:02    00:01:30          90           189
## 4 20071030HOULAL  00:01:36 00:01:32    00:00:04           4           189
## 5 20071030HOULAL  00:04:30 00:01:36    00:02:54         174           189
## 6 20071030HOULAL  00:04:43 00:04:30    00:00:13          13           186
##   HomePlayer2ID HomePlayer3ID HomePlayer4ID HomePlayer5ID AwayPlayer1ID
## 1           186           103           516           459           308
## 2           186           575           103           459           308
## 3           186           575           103           459           308
## 4           186           103           664           459           308
## 5           186           103           516           459           308
## 6           194           103           516           459           308
##   AwayPlayer2ID AwayPlayer3ID AwayPlayer4ID AwayPlayer5ID HomePlayer1Name
## 1           318           305           302            62           Brown
## 2           198           508           318           305           Brown
## 3           198           318           305           302           Brown
## 4           198           318           305           302           Brown
## 5           198           508           305           302           Brown
## 6           198           508           305           302          Bryant
##   HomePlayer2Name HomePlayer3Name HomePlayer4Name HomePlayer5Name
## 1          Bryant          Fisher          Turiaf          Walton
## 2          Bryant          Farmar          Fisher          Walton
## 3          Bryant          Farmar          Fisher          Walton
## 4          Bryant          Fisher            Karl          Walton
## 5          Bryant          Fisher          Turiaf          Walton
## 6           Bynum          Fisher          Turiaf          Walton
##   AwayPlayer1Name AwayPlayer2Name AwayPlayer3Name AwayPlayer4Name
## 1          Alston           James         McGrady             Yao
## 2          Alston         Battier           Hayes           James
## 3          Alston         Battier           James         McGrady
## 4          Alston         Battier           James         McGrady
## 5          Alston         Battier           Hayes         McGrady
## 6          Alston         Battier           Hayes         McGrady
##   AwayPlayer5Name StartScoreHome StartScoreAway EndScoreHome EndScoreAway
## 1           Wells             93             95           93           95
## 2         McGrady             92             95           93           95
## 3             Yao             83             92           92           95
## 4             Yao             80             92           83           92
## 5             Yao             76             82           80           92
## 6             Yao             76             82           76           82
##   PointsScoredHome PointsScoredAway PlusMinusHome PlusMinusAway
## 1                0                0             0             0
## 2                1                0             1            -1
## 3                9                3             6            -6
## 4                3                0             3            -3
## 5                4               10            -6             6
## 6                0                0             0             0
##   PossessionsHome PossessionsAway OffensiveRtgHome OffensiveRtgAway
## 1               0               0             NULL             NULL
## 2               0               0             NULL             NULL
## 3               4               5              225               60
## 4               1               0              300             NULL
## 5               5               6               80          166.667
## 6               0               0             NULL             NULL
##   OverallRtgHomevsAway OverallRtgAwayvsHome OffensiveReboundsHome
## 1                 NULL                 NULL                     0
## 2                 NULL                 NULL                     0
## 3                  165                 -165                     0
## 4                 NULL                 NULL                     0
## 5             -86.6667              86.6667                     0
## 6                 NULL                 NULL                     0
##   OffensiveReboundsAway DefensiveReboundsHome DefensiveReboundsAway
## 1                     0                     0                     0
## 2                     0                     0                     0
## 3                     0                     1                     0
## 4                     0                     0                     0
## 5                     0                     1                     3
## 6                     0                     0                     0
##   OffensiveReboundingRateHome OffensiveReboundingRateAway
## 1                        NULL                        NULL
## 2                        NULL                        NULL
## 3                        NULL                           0
## 4                        NULL                        NULL
## 5                           0                           0
## 6                        NULL                        NULL
##   DefensiveReboundingRateHome DefensiveReboundingRateAway
## 1                        NULL                        NULL
## 2                        NULL                        NULL
## 3                           1                        NULL
## 4                        NULL                        NULL
## 5                           1                           1
## 6                        NULL                        NULL

Quelques mises en forme

nrow_d <- nrow(d)
nrow_d
## [1] 35458
for (i in 1:nrow_d) {
d$Date[i] <- substr(d$GameID[i], start = 1, stop = 8)
d$AwayTeam[i] <- substr(d$GameID[i], start = 9, stop = 11)
d$HomeTeam[i] <- substr(d$GameID[i], start = 12, stop = 14)
d$GameName[i] <- toString(c(d$Date[i], d$AwayTeam[i], d$HomeTeam[i]))
}

d <- d[,-which(names(d) %in% c("GameID"))]

head(d)
##   StartTime  EndTime ElapsedTime ElapsedSecs HomePlayer1ID HomePlayer2ID
## 1  00:00:01 00:00:00    00:00:01           1           189           186
## 2  00:00:02 00:00:01    00:00:01           1           189           186
## 3  00:01:32 00:00:02    00:01:30          90           189           186
## 4  00:01:36 00:01:32    00:00:04           4           189           186
## 5  00:04:30 00:01:36    00:02:54         174           189           186
## 6  00:04:43 00:04:30    00:00:13          13           186           194
##   HomePlayer3ID HomePlayer4ID HomePlayer5ID AwayPlayer1ID AwayPlayer2ID
## 1           103           516           459           308           318
## 2           575           103           459           308           198
## 3           575           103           459           308           198
## 4           103           664           459           308           198
## 5           103           516           459           308           198
## 6           103           516           459           308           198
##   AwayPlayer3ID AwayPlayer4ID AwayPlayer5ID HomePlayer1Name
## 1           305           302            62           Brown
## 2           508           318           305           Brown
## 3           318           305           302           Brown
## 4           318           305           302           Brown
## 5           508           305           302           Brown
## 6           508           305           302          Bryant
##   HomePlayer2Name HomePlayer3Name HomePlayer4Name HomePlayer5Name
## 1          Bryant          Fisher          Turiaf          Walton
## 2          Bryant          Farmar          Fisher          Walton
## 3          Bryant          Farmar          Fisher          Walton
## 4          Bryant          Fisher            Karl          Walton
## 5          Bryant          Fisher          Turiaf          Walton
## 6           Bynum          Fisher          Turiaf          Walton
##   AwayPlayer1Name AwayPlayer2Name AwayPlayer3Name AwayPlayer4Name
## 1          Alston           James         McGrady             Yao
## 2          Alston         Battier           Hayes           James
## 3          Alston         Battier           James         McGrady
## 4          Alston         Battier           James         McGrady
## 5          Alston         Battier           Hayes         McGrady
## 6          Alston         Battier           Hayes         McGrady
##   AwayPlayer5Name StartScoreHome StartScoreAway EndScoreHome EndScoreAway
## 1           Wells             93             95           93           95
## 2         McGrady             92             95           93           95
## 3             Yao             83             92           92           95
## 4             Yao             80             92           83           92
## 5             Yao             76             82           80           92
## 6             Yao             76             82           76           82
##   PointsScoredHome PointsScoredAway PlusMinusHome PlusMinusAway
## 1                0                0             0             0
## 2                1                0             1            -1
## 3                9                3             6            -6
## 4                3                0             3            -3
## 5                4               10            -6             6
## 6                0                0             0             0
##   PossessionsHome PossessionsAway OffensiveRtgHome OffensiveRtgAway
## 1               0               0             NULL             NULL
## 2               0               0             NULL             NULL
## 3               4               5              225               60
## 4               1               0              300             NULL
## 5               5               6               80          166.667
## 6               0               0             NULL             NULL
##   OverallRtgHomevsAway OverallRtgAwayvsHome OffensiveReboundsHome
## 1                 NULL                 NULL                     0
## 2                 NULL                 NULL                     0
## 3                  165                 -165                     0
## 4                 NULL                 NULL                     0
## 5             -86.6667              86.6667                     0
## 6                 NULL                 NULL                     0
##   OffensiveReboundsAway DefensiveReboundsHome DefensiveReboundsAway
## 1                     0                     0                     0
## 2                     0                     0                     0
## 3                     0                     1                     0
## 4                     0                     0                     0
## 5                     0                     1                     3
## 6                     0                     0                     0
##   OffensiveReboundingRateHome OffensiveReboundingRateAway
## 1                        NULL                        NULL
## 2                        NULL                        NULL
## 3                        NULL                           0
## 4                        NULL                        NULL
## 5                           0                           0
## 6                        NULL                        NULL
##   DefensiveReboundingRateHome DefensiveReboundingRateAway     Date
## 1                        NULL                        NULL 20071030
## 2                        NULL                        NULL 20071030
## 3                           1                        NULL 20071030
## 4                        NULL                        NULL 20071030
## 5                           1                           1 20071030
## 6                        NULL                        NULL 20071030
##   AwayTeam HomeTeam           GameName
## 1      HOU      LAL 20071030, HOU, LAL
## 2      HOU      LAL 20071030, HOU, LAL
## 3      HOU      LAL 20071030, HOU, LAL
## 4      HOU      LAL 20071030, HOU, LAL
## 5      HOU      LAL 20071030, HOU, LAL
## 6      HOU      LAL 20071030, HOU, LAL

On numérote les games

d$GameID <- rep(c(0), nrow(d))
d$GameID[1] <- 1

head(d)
##   StartTime  EndTime ElapsedTime ElapsedSecs HomePlayer1ID HomePlayer2ID
## 1  00:00:01 00:00:00    00:00:01           1           189           186
## 2  00:00:02 00:00:01    00:00:01           1           189           186
## 3  00:01:32 00:00:02    00:01:30          90           189           186
## 4  00:01:36 00:01:32    00:00:04           4           189           186
## 5  00:04:30 00:01:36    00:02:54         174           189           186
## 6  00:04:43 00:04:30    00:00:13          13           186           194
##   HomePlayer3ID HomePlayer4ID HomePlayer5ID AwayPlayer1ID AwayPlayer2ID
## 1           103           516           459           308           318
## 2           575           103           459           308           198
## 3           575           103           459           308           198
## 4           103           664           459           308           198
## 5           103           516           459           308           198
## 6           103           516           459           308           198
##   AwayPlayer3ID AwayPlayer4ID AwayPlayer5ID HomePlayer1Name
## 1           305           302            62           Brown
## 2           508           318           305           Brown
## 3           318           305           302           Brown
## 4           318           305           302           Brown
## 5           508           305           302           Brown
## 6           508           305           302          Bryant
##   HomePlayer2Name HomePlayer3Name HomePlayer4Name HomePlayer5Name
## 1          Bryant          Fisher          Turiaf          Walton
## 2          Bryant          Farmar          Fisher          Walton
## 3          Bryant          Farmar          Fisher          Walton
## 4          Bryant          Fisher            Karl          Walton
## 5          Bryant          Fisher          Turiaf          Walton
## 6           Bynum          Fisher          Turiaf          Walton
##   AwayPlayer1Name AwayPlayer2Name AwayPlayer3Name AwayPlayer4Name
## 1          Alston           James         McGrady             Yao
## 2          Alston         Battier           Hayes           James
## 3          Alston         Battier           James         McGrady
## 4          Alston         Battier           James         McGrady
## 5          Alston         Battier           Hayes         McGrady
## 6          Alston         Battier           Hayes         McGrady
##   AwayPlayer5Name StartScoreHome StartScoreAway EndScoreHome EndScoreAway
## 1           Wells             93             95           93           95
## 2         McGrady             92             95           93           95
## 3             Yao             83             92           92           95
## 4             Yao             80             92           83           92
## 5             Yao             76             82           80           92
## 6             Yao             76             82           76           82
##   PointsScoredHome PointsScoredAway PlusMinusHome PlusMinusAway
## 1                0                0             0             0
## 2                1                0             1            -1
## 3                9                3             6            -6
## 4                3                0             3            -3
## 5                4               10            -6             6
## 6                0                0             0             0
##   PossessionsHome PossessionsAway OffensiveRtgHome OffensiveRtgAway
## 1               0               0             NULL             NULL
## 2               0               0             NULL             NULL
## 3               4               5              225               60
## 4               1               0              300             NULL
## 5               5               6               80          166.667
## 6               0               0             NULL             NULL
##   OverallRtgHomevsAway OverallRtgAwayvsHome OffensiveReboundsHome
## 1                 NULL                 NULL                     0
## 2                 NULL                 NULL                     0
## 3                  165                 -165                     0
## 4                 NULL                 NULL                     0
## 5             -86.6667              86.6667                     0
## 6                 NULL                 NULL                     0
##   OffensiveReboundsAway DefensiveReboundsHome DefensiveReboundsAway
## 1                     0                     0                     0
## 2                     0                     0                     0
## 3                     0                     1                     0
## 4                     0                     0                     0
## 5                     0                     1                     3
## 6                     0                     0                     0
##   OffensiveReboundingRateHome OffensiveReboundingRateAway
## 1                        NULL                        NULL
## 2                        NULL                        NULL
## 3                        NULL                           0
## 4                        NULL                        NULL
## 5                           0                           0
## 6                        NULL                        NULL
##   DefensiveReboundingRateHome DefensiveReboundingRateAway     Date
## 1                        NULL                        NULL 20071030
## 2                        NULL                        NULL 20071030
## 3                           1                        NULL 20071030
## 4                        NULL                        NULL 20071030
## 5                           1                           1 20071030
## 6                        NULL                        NULL 20071030
##   AwayTeam HomeTeam           GameName GameID
## 1      HOU      LAL 20071030, HOU, LAL      1
## 2      HOU      LAL 20071030, HOU, LAL      0
## 3      HOU      LAL 20071030, HOU, LAL      0
## 4      HOU      LAL 20071030, HOU, LAL      0
## 5      HOU      LAL 20071030, HOU, LAL      0
## 6      HOU      LAL 20071030, HOU, LAL      0
for(i in 2:nrow_d)
if(d$GameName[i] == d$GameName[i-1]) {d$GameID[i] <- d$GameID[i-1]} else {d$GameID[i] <- d$GameID[i-1]+1}

head(d)
##   StartTime  EndTime ElapsedTime ElapsedSecs HomePlayer1ID HomePlayer2ID
## 1  00:00:01 00:00:00    00:00:01           1           189           186
## 2  00:00:02 00:00:01    00:00:01           1           189           186
## 3  00:01:32 00:00:02    00:01:30          90           189           186
## 4  00:01:36 00:01:32    00:00:04           4           189           186
## 5  00:04:30 00:01:36    00:02:54         174           189           186
## 6  00:04:43 00:04:30    00:00:13          13           186           194
##   HomePlayer3ID HomePlayer4ID HomePlayer5ID AwayPlayer1ID AwayPlayer2ID
## 1           103           516           459           308           318
## 2           575           103           459           308           198
## 3           575           103           459           308           198
## 4           103           664           459           308           198
## 5           103           516           459           308           198
## 6           103           516           459           308           198
##   AwayPlayer3ID AwayPlayer4ID AwayPlayer5ID HomePlayer1Name
## 1           305           302            62           Brown
## 2           508           318           305           Brown
## 3           318           305           302           Brown
## 4           318           305           302           Brown
## 5           508           305           302           Brown
## 6           508           305           302          Bryant
##   HomePlayer2Name HomePlayer3Name HomePlayer4Name HomePlayer5Name
## 1          Bryant          Fisher          Turiaf          Walton
## 2          Bryant          Farmar          Fisher          Walton
## 3          Bryant          Farmar          Fisher          Walton
## 4          Bryant          Fisher            Karl          Walton
## 5          Bryant          Fisher          Turiaf          Walton
## 6           Bynum          Fisher          Turiaf          Walton
##   AwayPlayer1Name AwayPlayer2Name AwayPlayer3Name AwayPlayer4Name
## 1          Alston           James         McGrady             Yao
## 2          Alston         Battier           Hayes           James
## 3          Alston         Battier           James         McGrady
## 4          Alston         Battier           James         McGrady
## 5          Alston         Battier           Hayes         McGrady
## 6          Alston         Battier           Hayes         McGrady
##   AwayPlayer5Name StartScoreHome StartScoreAway EndScoreHome EndScoreAway
## 1           Wells             93             95           93           95
## 2         McGrady             92             95           93           95
## 3             Yao             83             92           92           95
## 4             Yao             80             92           83           92
## 5             Yao             76             82           80           92
## 6             Yao             76             82           76           82
##   PointsScoredHome PointsScoredAway PlusMinusHome PlusMinusAway
## 1                0                0             0             0
## 2                1                0             1            -1
## 3                9                3             6            -6
## 4                3                0             3            -3
## 5                4               10            -6             6
## 6                0                0             0             0
##   PossessionsHome PossessionsAway OffensiveRtgHome OffensiveRtgAway
## 1               0               0             NULL             NULL
## 2               0               0             NULL             NULL
## 3               4               5              225               60
## 4               1               0              300             NULL
## 5               5               6               80          166.667
## 6               0               0             NULL             NULL
##   OverallRtgHomevsAway OverallRtgAwayvsHome OffensiveReboundsHome
## 1                 NULL                 NULL                     0
## 2                 NULL                 NULL                     0
## 3                  165                 -165                     0
## 4                 NULL                 NULL                     0
## 5             -86.6667              86.6667                     0
## 6                 NULL                 NULL                     0
##   OffensiveReboundsAway DefensiveReboundsHome DefensiveReboundsAway
## 1                     0                     0                     0
## 2                     0                     0                     0
## 3                     0                     1                     0
## 4                     0                     0                     0
## 5                     0                     1                     3
## 6                     0                     0                     0
##   OffensiveReboundingRateHome OffensiveReboundingRateAway
## 1                        NULL                        NULL
## 2                        NULL                        NULL
## 3                        NULL                           0
## 4                        NULL                        NULL
## 5                           0                           0
## 6                        NULL                        NULL
##   DefensiveReboundingRateHome DefensiveReboundingRateAway     Date
## 1                        NULL                        NULL 20071030
## 2                        NULL                        NULL 20071030
## 3                           1                        NULL 20071030
## 4                        NULL                        NULL 20071030
## 5                           1                           1 20071030
## 6                        NULL                        NULL 20071030
##   AwayTeam HomeTeam           GameName GameID
## 1      HOU      LAL 20071030, HOU, LAL      1
## 2      HOU      LAL 20071030, HOU, LAL      1
## 3      HOU      LAL 20071030, HOU, LAL      1
## 4      HOU      LAL 20071030, HOU, LAL      1
## 5      HOU      LAL 20071030, HOU, LAL      1
## 6      HOU      LAL 20071030, HOU, LAL      1

On sauvegarde le fichier brut comportant ces quelques mises en forme

save(d, file = "d.RData")

It starts here!!!

library(psych)
library(prettyR)
## 
## Attaching package: 'prettyR'
## 
## The following objects are masked from 'package:psych':
## 
##     describe, skew

La fonction ‘qepm’ debute ici

############################## FUNCTION START #############################
qepm <- function(x){

load("d.RData")

####################ON SELECTIONNE LES GAMES DANS LESQUELS LE TP A JOUE

game_ID_d <- unique(d$GameID)
game_ID_d

d$selection <- rep(c(0), nrow(d))
d

for (i in 1:length(game_ID_d))
if(x %in% d[d$GameID == i,]$HomePlayer1ID == TRUE | x %in% d[d$GameID == i,]$HomePlayer2ID == TRUE | x %in% d[d$GameID == i,]$HomePlayer3ID == TRUE | x %in% d[d$GameID == i,]$HomePlayer4ID == TRUE | x %in% d[d$GameID == i,]$HomePlayer5ID == TRUE | x %in% d[d$GameID == i,]$AwayPlayer1ID == TRUE | x %in% d[d$GameID == i,]$AwayPlayer2ID == TRUE | x %in% d[d$GameID == i,]$AwayPlayer3ID == TRUE | x %in% d[d$GameID == i,]$AwayPlayer4ID == TRUE | x %in% d[d$GameID == i,]$AwayPlayer5ID == TRUE) {d[d$GameID == i,]$selection <- rep(c(1), length(d[d$GameID == i,]$GameID))} else {d[d$GameID == i,]$selection <- rep(c(0), length(d[d$GameID == i,]$GameID))}

d

##
d2 <- subset(d, d$selection == 1)
d2


###################################################################################

####################ON FAIT EN SORTE QUE: UN GAME = UN OBJET 
game_ID <- unique(d2$GameID)
game_ID

length(game_ID) ## Games played by TP

data_raw = list()
for (i in 1:length(game_ID)){
data_raw[[i]] <- d2[d2$GameID == game_ID[i],]
}


####################MAIN LOOP

result <- list()

for (k in 1:length(game_ID)) {
#for (k in 1:1) {

result[[k]] <- list()


####################ON DETERMINE SI L'EQUIPE DU TP EST "Home" ou "Away"
TP_home_away <- ifelse(x %in% data_raw[[k]]$HomePlayer1ID == TRUE | x %in% data_raw[[k]]$HomePlayer2ID == TRUE | x %in% data_raw[[k]]$HomePlayer3ID == TRUE | x %in% data_raw[[k]]$HomePlayer4ID == TRUE | x %in% data_raw[[k]]$HomePlayer5ID == TRUE, "Home", "Away")

team_name <- if(TP_home_away == "Home") {as.character(unique(data_raw[[k]]$HomeTeam))} else {as.character(unique(data_raw[[k]]$AwayTeam))}
opp_name <- if(TP_home_away == "Home") {as.character(unique(data_raw[[k]]$AwayTeam))} else {as.character(unique(data_raw[[k]]$HomeTeam))}

date <- as.character(unique(data_raw[[k]]$Date))

gameID <- as.character(unique(data_raw[[k]]$GameID))


####################ON IDENTIFIE LES DIFFERENTES LINEUPS

##LINEUPS DE L'EQUIPE DU TP ET DU CP
nrow_data_raw <- nrow(data_raw[[k]])

for (i in 1:nrow_data_raw) {
if(TP_home_away == "Home") {data_raw[[k]]$T_l_h[i] <- as.numeric(paste(as.character(sort(c(data_raw[[k]]$HomePlayer1ID[i],data_raw[[k]]$HomePlayer2ID[i],data_raw[[k]]$HomePlayer3ID[i],data_raw[[k]]$HomePlayer4ID[i],data_raw[[k]]$HomePlayer5ID[i]))), collapse = ''))} else {data_raw[[k]]$T_l_h[i] <- as.numeric(paste(as.character(sort(c(data_raw[[k]]$AwayPlayer1ID[i],data_raw[[k]]$AwayPlayer2ID[i],data_raw[[k]]$AwayPlayer3ID[i],data_raw[[k]]$AwayPlayer4ID[i],data_raw[[k]]$AwayPlayer5ID[i]))), collapse = ''))}

##LINEUPS DE L'EQUIPE EN FACE
if(TP_home_away == "Away") {data_raw[[k]]$O_l_h[i] <- as.numeric(paste(as.character(sort(c(data_raw[[k]]$HomePlayer1ID[i],data_raw[[k]]$HomePlayer2ID[i],data_raw[[k]]$HomePlayer3ID[i],data_raw[[k]]$HomePlayer4ID[i],data_raw[[k]]$HomePlayer5ID[i]))), collapse = ''))} else {data_raw[[k]]$O_l_h[i] <- as.numeric(paste(as.character(sort(c(data_raw[[k]]$AwayPlayer1ID[i],data_raw[[k]]$AwayPlayer2ID[i],data_raw[[k]]$AwayPlayer3ID[i],data_raw[[k]]$AwayPlayer4ID[i],data_raw[[k]]$AwayPlayer5ID[i]))), collapse = ''))}

}


################ON NUMEROTE LES LINEUPS
T_lineups <- cbind(data.frame(data_raw[[k]]$T_l_h), class=as.numeric(as.factor(do.call(paste, data.frame(data_raw[[k]]$T_l_h)))))

O_lineups <- cbind(data.frame(data_raw[[k]]$O_l_h), class=as.numeric(as.factor(do.call(paste, data.frame(data_raw[[k]]$O_l_h)))))
O_lineups

data_raw[[k]]$T_l <- T_lineups$class

data_raw[[k]]$O_l <- O_lineups$class


################ON IDENTIFIE LES LINEUPS UNIQUES
T_l_unique_raw <- data_raw[[k]][!duplicated(data_raw[[k]]$T_l),]
T_l_unique_raw

O_l_unique_raw <- data_raw[[k]][!duplicated(data_raw[[k]]$O_l),]
O_l_unique_raw

T_l_unique <- T_l_unique_raw[order(T_l_unique_raw$T_l),]
T_l_unique

O_l_unique <- O_l_unique_raw[order(O_l_unique_raw$O_l),]
O_l_unique


for (i in 1:nrow_data_raw)
data_raw[[k]]$c1[i] <- toString(c(data_raw[[k]]$T_l[i],data_raw[[k]]$O_l[i]))

c1_id <- cbind(data.frame(data_raw[[k]]$c1), class=as.numeric(as.factor(do.call(paste, data.frame(data_raw[[k]]$c1)))))
c1_id

data_raw[[k]]$c2 <- c1_id$class

for (i in 1:nrow_data_raw) {
data_raw[[k]]$occ[i] <- ifelse(length(which(data_raw[[k]]$c2 %in% data_raw[[k]]$c2[i])) == 1, 1, which(which(data_raw[[k]]$c2 %in% data_raw[[k]]$c2[i]) %in% i))

data_raw[[k]]$c4[i] <- toString(c(data_raw[[k]]$T_l[i],data_raw[[k]]$O_l[i],data_raw[[k]]$occ[i]))
}


################ON GENERE TOUTES LES COMPARAISONS DEUX A DEUX
comp_all_raw <- data.frame(t(combn(data_raw[[k]]$c4, 2)))
comp_all_raw

comp_all_raw$X1 <- as.character(comp_all_raw$X1)
comp_all_raw$X2 <- as.character(comp_all_raw$X2)

nrow_comp_all_raw <- nrow(comp_all_raw)
nrow_comp_all_raw

for(i in 1:nrow_comp_all_raw) {
comp_all_raw$PA_T_l[i] <- (strsplit(comp_all_raw$X1, ", ")[[i]])[1]

comp_all_raw$PB_T_l[i] <- (strsplit(comp_all_raw$X2, ", ")[[i]])[1]

comp_all_raw$PA_O_l[i] <- (strsplit(comp_all_raw$X1, ", ")[[i]])[2]

comp_all_raw$PB_O_l[i] <- (strsplit(comp_all_raw$X2, ", ")[[i]])[2]

comp_all_raw$PA_T_l_O_l_occ[i] <- (strsplit(comp_all_raw$X1, ", ")[[i]])[3]

comp_all_raw$PB_T_l_O_l_occ[i] <- (strsplit(comp_all_raw$X2, ", ")[[i]])[3]

}

comp_all_raw


###########ON RETIRE LES COMPARAISONS NON PERTINENTES (i.e. comparaisons de lineups identiques: PA_T_l == PB_T_l)
comp_all_raw$h <- ifelse(comp_all_raw$PA_T_l == comp_all_raw$PB_T_l, 1, 0)
comp_all_raw

comp_all <- subset(comp_all_raw, comp_all_raw$h != 1)
comp_all

nrow_comp_all <- nrow(comp_all)
nrow_comp_all

comp_all$PA_T_l <- as.numeric(comp_all$PA_T_l)
comp_all$PB_T_l <- as.numeric(comp_all$PB_T_l)
comp_all$PA_O_l <- as.numeric(comp_all$PA_O_l)
comp_all$PB_O_l <- as.numeric(comp_all$PB_O_l)


################ON IDENTIFIE LES JOUEURS DES LINEUPS UNIQUES
T_l_unique_players <- if(TP_home_away == "Home") {T_l_unique[,c('HomePlayer1ID','HomePlayer2ID','HomePlayer3ID','HomePlayer4ID','HomePlayer5ID')]} else {T_l_unique[,c('AwayPlayer1ID','AwayPlayer2ID','AwayPlayer3ID','AwayPlayer4ID','AwayPlayer5ID')]}
T_l_unique_players

O_l_unique_players <- if(TP_home_away == "Away") {O_l_unique[,c('HomePlayer1ID','HomePlayer2ID','HomePlayer3ID','HomePlayer4ID','HomePlayer5ID')]} else {O_l_unique[,c('AwayPlayer1ID','AwayPlayer2ID','AwayPlayer3ID','AwayPlayer4ID','AwayPlayer5ID')]}
O_l_unique_players

T_l_unique_players_transp <- data.frame(t(T_l_unique_players))
T_l_unique_players_transp

O_l_unique_players_transp <- data.frame(t(O_l_unique_players))
O_l_unique_players_transp


for(i in 1:nrow_comp_all) {
comp_all$PA_T_l_players[i] <- toString(T_l_unique_players_transp[,comp_all$PA_T_l[i]])

comp_all$PB_T_l_players[i] <- toString(T_l_unique_players_transp[,comp_all$PB_T_l[i]])

comp_all$PA_O_l_players[i] <- toString(O_l_unique_players_transp[,comp_all$PA_O_l[i]])

comp_all$PB_O_l_players[i] <- toString(O_l_unique_players_transp[,comp_all$PB_O_l[i]])
}

comp_all


################ON IDENTIFIE LES JOUEURS QUI DIFFERENT ENTRE LES LINEUPS (DE L'EQUIPE DU TP)

##
outersect <- function(x, y) {
  sort(c(setdiff(x, y),
         setdiff(y, x)))
}
##

for(i in 1:nrow_comp_all) {
comp_all$T_players_differing[i] <- toString(outersect(T_l_unique_players_transp[,comp_all$PA_T_l[i]], T_l_unique_players_transp[,comp_all$PB_T_l[i]]))

comp_all$n_differing[i] <- length(strsplit(comp_all$T_players_differing[i], ", ")[[1]])
}

comp_all


################ON SELECTIONNE LES COMPARAISONS "1" (SEULS DEUX JOUEURS DIFFERENT ENTRE LES LINEUPS)
comp_2 <- subset(comp_all, comp_all$n_differing == 2)
comp_2

nrow_comp_2 <- nrow(comp_2)
nrow_comp_2


################ON IDENTIFIE LES DEUX JOUEURS DANS CHAQUE COMPARAISON
for(i in 1:nrow_comp_2) {
comp_2$player_A[i] <- (strsplit(comp_2$T_players_differing, ", ")[[i]])[1]

comp_2$player_B[i] <- (strsplit(comp_2$T_players_differing, ", ")[[i]])[2]
}

comp_2

comp_2$player_A <- as.numeric(comp_2$player_A)
comp_2$player_B <- as.numeric(comp_2$player_B)


################ON SELECTIONNE LES COMPARAISONS QUI IMPLIQUENT LE TP
comp_2$h2 <- ifelse(comp_2$player_A == x | comp_2$player_B == x, 1 ,0)
comp_2

comp_2_TP <- subset(comp_2, comp_2$h2 == 1)
comp_2_TP

nrow_comp_2_TP <- nrow(comp_2_TP)
nrow_comp_2_TP


if(nrow_comp_2_TP == 0) {result[[k]] <- 0} else {


################ON IDENTIFIE LE CP DANS CHAQUE COMPARAISON
comp_2_TP$TP_ID <- rep(c(x), nrow_comp_2_TP)

comp_2_TP$CP_ID <- ifelse(comp_2_TP$player_A == x, comp_2_TP$player_B, comp_2_TP$player_A)

comp_2_TP


################ON "SORT" LES JOUEURS DES QUATRE LINEUPS IMPLIQUEES DANS CHAQUE COMPARAISON

for(i in 1:nrow_comp_2_TP) {

##PA_T_l_players
comp_2_TP$PA_T_l_p1[i] <- strsplit(comp_2_TP$PA_T_l_players, ", ")[[i]][1]
comp_2_TP$PA_T_l_p2[i] <- strsplit(comp_2_TP$PA_T_l_players, ", ")[[i]][2]
comp_2_TP$PA_T_l_p3[i] <- strsplit(comp_2_TP$PA_T_l_players, ", ")[[i]][3]
comp_2_TP$PA_T_l_p4[i] <- strsplit(comp_2_TP$PA_T_l_players, ", ")[[i]][4]
comp_2_TP$PA_T_l_p5[i] <- strsplit(comp_2_TP$PA_T_l_players, ", ")[[i]][5]

##PB_T_l_players
comp_2_TP$PB_T_l_p1[i] <- strsplit(comp_2_TP$PB_T_l_players, ", ")[[i]][1]
comp_2_TP$PB_T_l_p2[i] <- strsplit(comp_2_TP$PB_T_l_players, ", ")[[i]][2]
comp_2_TP$PB_T_l_p3[i] <- strsplit(comp_2_TP$PB_T_l_players, ", ")[[i]][3]
comp_2_TP$PB_T_l_p4[i] <- strsplit(comp_2_TP$PB_T_l_players, ", ")[[i]][4]
comp_2_TP$PB_T_l_p5[i] <- strsplit(comp_2_TP$PB_T_l_players, ", ")[[i]][5]

##PA_O_l_players
comp_2_TP$PA_O_l_p1[i] <- strsplit(comp_2_TP$PA_O_l_players, ", ")[[i]][1]
comp_2_TP$PA_O_l_p2[i] <- strsplit(comp_2_TP$PA_O_l_players, ", ")[[i]][2]
comp_2_TP$PA_O_l_p3[i] <- strsplit(comp_2_TP$PA_O_l_players, ", ")[[i]][3]
comp_2_TP$PA_O_l_p4[i] <- strsplit(comp_2_TP$PA_O_l_players, ", ")[[i]][4]
comp_2_TP$PA_O_l_p5[i] <- strsplit(comp_2_TP$PA_O_l_players, ", ")[[i]][5]

##PB_O_l_players
comp_2_TP$PB_O_l_p1[i] <- strsplit(comp_2_TP$PB_O_l_players, ", ")[[i]][1]
comp_2_TP$PB_O_l_p2[i] <- strsplit(comp_2_TP$PB_O_l_players, ", ")[[i]][2]
comp_2_TP$PB_O_l_p3[i] <- strsplit(comp_2_TP$PB_O_l_players, ", ")[[i]][3]
comp_2_TP$PB_O_l_p4[i] <- strsplit(comp_2_TP$PB_O_l_players, ", ")[[i]][4]
comp_2_TP$PB_O_l_p5[i] <- strsplit(comp_2_TP$PB_O_l_players, ", ")[[i]][5]
}

comp_2_TP


comp_2_TP$PA_T_l_p1 <- as.numeric(comp_2_TP$PA_T_l_p1)
comp_2_TP$PA_T_l_p2 <- as.numeric(comp_2_TP$PA_T_l_p2)
comp_2_TP$PA_T_l_p3 <- as.numeric(comp_2_TP$PA_T_l_p3)
comp_2_TP$PA_T_l_p4 <- as.numeric(comp_2_TP$PA_T_l_p4)
comp_2_TP$PA_T_l_p5 <- as.numeric(comp_2_TP$PA_T_l_p5)

comp_2_TP$PB_T_l_p1 <- as.numeric(comp_2_TP$PB_T_l_p1)
comp_2_TP$PB_T_l_p2 <- as.numeric(comp_2_TP$PB_T_l_p2)
comp_2_TP$PB_T_l_p3 <- as.numeric(comp_2_TP$PB_T_l_p3)
comp_2_TP$PB_T_l_p4 <- as.numeric(comp_2_TP$PB_T_l_p4)
comp_2_TP$PB_T_l_p5 <- as.numeric(comp_2_TP$PB_T_l_p5)

comp_2_TP$PA_O_l_p1 <- as.numeric(comp_2_TP$PA_O_l_p1)
comp_2_TP$PA_O_l_p2 <- as.numeric(comp_2_TP$PA_O_l_p2)
comp_2_TP$PA_O_l_p3 <- as.numeric(comp_2_TP$PA_O_l_p3)
comp_2_TP$PA_O_l_p4 <- as.numeric(comp_2_TP$PA_O_l_p4)
comp_2_TP$PA_O_l_p5 <- as.numeric(comp_2_TP$PA_O_l_p5)

comp_2_TP$PB_O_l_p1 <- as.numeric(comp_2_TP$PB_O_l_p1)
comp_2_TP$PB_O_l_p2 <- as.numeric(comp_2_TP$PB_O_l_p2)
comp_2_TP$PB_O_l_p3 <- as.numeric(comp_2_TP$PB_O_l_p3)
comp_2_TP$PB_O_l_p4 <- as.numeric(comp_2_TP$PB_O_l_p4)
comp_2_TP$PB_O_l_p5 <- as.numeric(comp_2_TP$PB_O_l_p5)


################ON ASSOCIE A "TP_ID" et "CP_ID" LES JOUEURS DE LEUR LINEUP ET CEUX DE LA LINEUP EN FACE
comp_2_TP$TP_T_l_players <- ifelse(comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p1 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p2 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p3 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p4 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p5, comp_2_TP$PA_T_l_players, comp_2_TP$PB_T_l_players)

comp_2_TP$CP_T_l_players <- ifelse(comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p1 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p2 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p3 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p4 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p5, comp_2_TP$PA_T_l_players, comp_2_TP$PB_T_l_players)

comp_2_TP$TP_O_l_players <- ifelse(comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p1 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p2 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p3 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p4 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p5, comp_2_TP$PA_O_l_players, comp_2_TP$PB_O_l_players)

comp_2_TP$CP_O_l_players <- ifelse(comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p1 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p2 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p3 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p4 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p5, comp_2_TP$PA_O_l_players, comp_2_TP$PB_O_l_players)

comp_2_TP


comp_2_TP$TP_T_l <- ifelse(comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p1 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p2 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p3 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p4 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p5, comp_2_TP$PA_T_l, comp_2_TP$PB_T_l)

comp_2_TP$CP_T_l <- ifelse(comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p1 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p2 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p3 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p4 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p5, comp_2_TP$PA_T_l, comp_2_TP$PB_T_l)

comp_2_TP$TP_O_l <- ifelse(comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p1 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p2 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p3 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p4 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p5, comp_2_TP$PA_O_l, comp_2_TP$PB_O_l)

comp_2_TP$CP_O_l <- ifelse(comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p1 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p2 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p3 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p4 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p5, comp_2_TP$PA_O_l, comp_2_TP$PB_O_l)

comp_2_TP


comp_2_TP$TP_T_l_O_l_occ <- ifelse(comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p1 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p2 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p3 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p4 | comp_2_TP$TP_ID == comp_2_TP$PA_T_l_p5, comp_2_TP$PA_T_l_O_l_occ, comp_2_TP$PB_T_l_O_l_occ)

comp_2_TP$CP_T_l_O_l_occ <- ifelse(comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p1 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p2 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p3 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p4 | comp_2_TP$CP_ID == comp_2_TP$PA_T_l_p5, comp_2_TP$PA_T_l_O_l_occ, comp_2_TP$PB_T_l_O_l_occ)

comp_2_TP


################DANS LE TABLEAU DES COMPARAISONS ("comp_2_TP"), ON CREE LES COLONNES DANS QUI VONT PERMETTRE LES COMPARAISONS
TP_raw <- data_raw[[k]]
TP_raw

nrow_TP_raw <- nrow(TP_raw)
nrow_TP_raw

ncol_TP_raw <- ncol(TP_raw)
ncol_TP_raw

for(i in 1:nrow_comp_2_TP)
for(j in 1:nrow_TP_raw)
TP_raw[j,i+ncol_TP_raw] <- ifelse((TP_raw$T_l[j] == comp_2_TP$TP_T_l[i] & TP_raw$O_l[j] == comp_2_TP$TP_O_l[i] & TP_raw$occ[j] == comp_2_TP$TP_T_l_O_l_occ[i]), comp_2_TP$TP_ID[i], ifelse((TP_raw$T_l[j] == comp_2_TP$CP_T_l[i] & TP_raw$O_l[j] == comp_2_TP$CP_O_l[i] & TP_raw$occ[j] == comp_2_TP$CP_T_l_O_l_occ[i]), comp_2_TP$CP_ID[i], 0) )

TP_raw


####NOUVEL OBJET: H (MEME NOMBRE DE LIGNES QUE "comp_2_TP")
col1 <- match("V61", names(TP_raw))
col1
col_last <- ncol(TP_raw)
col_last

H1 <- data.frame(t(TP_raw[,c(col1:col_last)]))
H1

nrow_H1 <- nrow(H1)
ncol_H1 <- ncol(H1)

H2 <- H1


################
H2$TP_ID <- comp_2_TP$TP_ID

H2$CP_ID <- comp_2_TP$CP_ID

H2

for(i in 1:nrow_H1)
H2$TP_n[i] <- length(which(as.numeric(as.vector(H1[i,])) == H2$TP_ID[i]))

for(i in 1:nrow_H1)
H2$CP_n[i] <- length(which(as.numeric(as.vector(H1[i,])) == H2$CP_ID[i]))

H2


################ON ISOLE LES DIFFERENTES MESURES

##
H_StartTime <- as.character(TP_raw$StartTime)
H_StartTime

##
H_EndTime <- as.character(TP_raw$EndTime)
H_EndTime

##
H_ElapsedTime <- TP_raw$ElapsedSecs
H_ElapsedTime

##
H_Possessions_T <- if(TP_home_away == "Home") {as.vector(TP_raw$PossessionsHome)} else {as.vector(TP_raw$PossessionsAway)}
H_Possessions_T

H_Possessions_O <- if(TP_home_away == "Home") {as.vector(TP_raw$PossessionsAway)} else {as.vector(TP_raw$PossessionsHome)}
H_Possessions_O

##
H_PointsScored_T <- if(TP_home_away == "Home") {as.vector(TP_raw$PointsScoredHome)} else {as.vector(TP_raw$PointsScoredAway)}
H_PointsScored_T

H_PointsScored_O <- if(TP_home_away == "Home") {as.vector(TP_raw$PointsScoredAway)} else {as.vector(TP_raw$PointsScoredHome)}
H_PointsScored_O

##
H_PlusMinus <- if(TP_home_away == "Home") {as.vector(TP_raw$PlusMinusHome)} else {as.vector(TP_raw$PlusMinusAway)}
H_PlusMinus


################ON CALCULE LES DIFFERENTES MESURES POUR TP ET CP

######START TIME

##TP
H_StartTime_TP <- H1
H_StartTime_TP

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_StartTime_TP[i,j] <- ifelse(H2[i,j] == H2$TP_ID[i], H_StartTime[j], 0)

H_StartTime_TP

for(i in 1:nrow_H1)
H_StartTime_TP$x2[i] <- H_StartTime[which(H1[i,] %in% H2$TP_ID[i])]

##CP
H_StartTime_CP <- H1
H_StartTime_CP

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_StartTime_CP[i,j] <- ifelse(H2[i,j] == H2$CP_ID[i], H_StartTime[j], 0)

H_StartTime_CP

for(i in 1:nrow_H1)
H_StartTime_CP$x2[i] <- H_StartTime[which(H1[i,] %in% H2$CP_ID[i])]

##
H2$TP_StartTime <- H_StartTime_TP$x2
H2$CP_StartTime <- H_StartTime_CP$x2

H2


######END TIME

##TP
H_EndTime_TP <- H1
H_EndTime_TP

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_EndTime_TP[i,j] <- ifelse(H2[i,j] == H2$TP_ID[i], H_EndTime[j], 0)

H_EndTime_TP

for(i in 1:nrow_H1)
H_EndTime_TP$x2[i] <- H_EndTime[which(H1[i,] %in% H2$TP_ID[i])]

##CP
H_EndTime_CP <- H1
H_EndTime_CP

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_EndTime_CP[i,j] <- ifelse(H2[i,j] == H2$CP_ID[i], H_EndTime[j], 0)

H_EndTime_CP

for(i in 1:nrow_H1)
H_EndTime_CP$x2[i] <- H_EndTime[which(H1[i,] %in% H2$CP_ID[i])]

##
H2$TP_EndTime <- H_EndTime_TP$x2
H2$CP_EndTime <- H_EndTime_CP$x2

H2


######ELAPSED TIME

##TP
H_ElapsedTime_TP <- H1
H_ElapsedTime_TP

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_ElapsedTime_TP[i,j] <- ifelse(H2[i,j] == H2$TP_ID[i], H_ElapsedTime[j], 0)

H_ElapsedTime_TP

H_ElapsedTime_TP$x1 <- rowSums(H_ElapsedTime_TP)
H_ElapsedTime_TP

#AUTRE METHODE
for(i in 1:nrow_H1)
H_ElapsedTime_TP$x2[i] <- H_ElapsedTime[which(H1[i,] %in% H2$TP_ID[i])]


##CP
H_ElapsedTime_CP <- H1
H_ElapsedTime_CP

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_ElapsedTime_CP[i,j] <- ifelse(H2[i,j] == H2$CP_ID[i], H_ElapsedTime[j], 0)

H_ElapsedTime_CP

H_ElapsedTime_CP$x1 <- rowSums(H_ElapsedTime_CP)
H_ElapsedTime_CP

#AUTRE METHODE
for(i in 1:nrow_H1)
H_ElapsedTime_CP$x2[i] <- H_ElapsedTime[which(H1[i,] %in% H2$CP_ID[i])]


##
H2$TP_ElapsedTime <- H_ElapsedTime_TP$x2
H2$CP_ElapsedTime <- H_ElapsedTime_CP$x2

H2


######POSSESSIONS

##TP_T
H_Possessions_TP_T <- H1
H_Possessions_TP_T

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_Possessions_TP_T[i,j] <- ifelse(H2[i,j] == H2$TP_ID[i], H_Possessions_T[j], 0)

H_Possessions_TP_T

H_Possessions_TP_T$x1 <- rowSums(H_Possessions_TP_T)
H_Possessions_TP_T

#AUTRE METHODE
for(i in 1:nrow_H1)
H_Possessions_TP_T$x2[i] <- H_Possessions_T[which(H1[i,] %in% H2$TP_ID[i])]

##TP_O
H_Possessions_TP_O <- H1
H_Possessions_TP_O

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_Possessions_TP_O[i,j] <- ifelse(H2[i,j] == H2$TP_ID[i], H_Possessions_O[j], 0)

H_Possessions_TP_O

H_Possessions_TP_O$x1 <- rowSums(H_Possessions_TP_O)
H_Possessions_TP_O

#AUTRE METHODE
for(i in 1:nrow_H1)
H_Possessions_TP_O$x2[i] <- H_Possessions_O[which(H1[i,] %in% H2$TP_ID[i])]


##CP_T
H_Possessions_CP_T <- H1
H_Possessions_CP_T

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_Possessions_CP_T[i,j] <- ifelse(H2[i,j] == H2$CP_ID[i], H_Possessions_T[j], 0)

H_Possessions_CP_T

H_Possessions_CP_T$x1 <- rowSums(H_Possessions_CP_T)
H_Possessions_CP_T

#AUTRE METHODE
for(i in 1:nrow_H1)
H_Possessions_CP_T$x2[i] <- H_Possessions_T[which(H1[i,] %in% H2$CP_ID[i])]

##CP_O
H_Possessions_CP_O <- H1
H_Possessions_CP_O

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_Possessions_CP_O[i,j] <- ifelse(H2[i,j] == H2$CP_ID[i], H_Possessions_O[j], 0)

H_Possessions_CP_O

H_Possessions_CP_O$x1 <- rowSums(H_Possessions_CP_O)
H_Possessions_CP_O

#AUTRE METHODE
for(i in 1:nrow_H1)
H_Possessions_CP_O$x2[i] <- H_Possessions_O[which(H1[i,] %in% H2$CP_ID[i])]


##
H2$TP_Possessions_T <- H_Possessions_TP_T$x2
H2$TP_Possessions_O <- H_Possessions_TP_O$x2
H2$CP_Possessions_T <- H_Possessions_CP_T$x2
H2$CP_Possessions_O <- H_Possessions_CP_O$x2

H2


######POINTS SCORED

##TP_T
H_PointsScored_TP_T <- H1
H_PointsScored_TP_T

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_PointsScored_TP_T[i,j] <- ifelse(H2[i,j] == H2$TP_ID[i], H_PointsScored_T[j], 0)

H_PointsScored_TP_T

H_PointsScored_TP_T$x1 <- rowSums(H_PointsScored_TP_T)
H_PointsScored_TP_T

#AUTRE METHODE
for(i in 1:nrow_H1)
H_PointsScored_TP_T$x2[i] <- H_PointsScored_T[which(H1[i,] %in% H2$TP_ID[i])]

##TP_O
H_PointsScored_TP_O <- H1
H_PointsScored_TP_O

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_PointsScored_TP_O[i,j] <- ifelse(H2[i,j] == H2$TP_ID[i], H_PointsScored_O[j], 0)

H_PointsScored_TP_O

H_PointsScored_TP_O$x1 <- rowSums(H_PointsScored_TP_O)
H_PointsScored_TP_O

#AUTRE METHODE
for(i in 1:nrow_H1)
H_PointsScored_TP_O$x2[i] <- H_PointsScored_O[which(H1[i,] %in% H2$TP_ID[i])]


##CP_T
H_PointsScored_CP_T <- H1
H_PointsScored_CP_T

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_PointsScored_CP_T[i,j] <- ifelse(H2[i,j] == H2$CP_ID[i], H_PointsScored_T[j], 0)

H_PointsScored_CP_T

H_PointsScored_CP_T$x1 <- rowSums(H_PointsScored_CP_T)
H_PointsScored_CP_T

#AUTRE METHODE
for(i in 1:nrow_H1)
H_PointsScored_CP_T$x2[i] <- H_PointsScored_T[which(H1[i,] %in% H2$CP_ID[i])]

##CP_O
H_PointsScored_CP_O <- H1
H_PointsScored_CP_O

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_PointsScored_CP_O[i,j] <- ifelse(H2[i,j] == H2$CP_ID[i], H_PointsScored_O[j], 0)

H_PointsScored_CP_O

H_PointsScored_CP_O$x1 <- rowSums(H_PointsScored_CP_O)
H_PointsScored_CP_O

#AUTRE METHODE
for(i in 1:nrow_H1)
H_PointsScored_CP_O$x2[i] <- H_PointsScored_O[which(H1[i,] %in% H2$CP_ID[i])]


##
H2$TP_PointsScored_T <- H_PointsScored_TP_T$x2
H2$TP_PointsScored_O <- H_PointsScored_TP_O$x2
H2$CP_PointsScored_T <- H_PointsScored_CP_T$x2
H2$CP_PointsScored_O <- H_PointsScored_CP_O$x2

H2


######PLUS/MINUS RAW

##TP
H_PlusMinus_TP <- H1
H_PlusMinus_TP

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_PlusMinus_TP[i,j] <- ifelse(H2[i,j] == H2$TP_ID[i], H_PlusMinus[j], 0)

H_PlusMinus_TP

H_PlusMinus_TP$x1 <- rowSums(H_PlusMinus_TP)
H_PlusMinus_TP

#AUTRE METHODE
for(i in 1:nrow_H1)
H_PlusMinus_TP$x2[i] <- H_PlusMinus[which(H1[i,] %in% H2$TP_ID[i])]


##CP
H_PlusMinus_CP <- H1
H_PlusMinus_CP

for(i in 1:nrow_H1)
for(j in 1:ncol_H1)
H_PlusMinus_CP[i,j] <- ifelse(H2[i,j] == H2$CP_ID[i], H_PlusMinus[j], 0)

H_PlusMinus_CP

H_PlusMinus_CP$x1 <- rowSums(H_PlusMinus_CP)
H_PlusMinus_CP

#AUTRE METHODE
for(i in 1:nrow_H1)
H_PlusMinus_CP$x2[i] <- H_PlusMinus[which(H1[i,] %in% H2$CP_ID[i])]

##
H2$TP_PM_raw <- H_PlusMinus_TP$x2
H2$CP_PM_raw <- H_PlusMinus_CP$x2


######PLUS/MINUS PER-POSSESSION
H2$TP_PM_perposs <- (H2$TP_PointsScored_T/H2$TP_Possessions_T) - (H2$TP_PointsScored_O/H2$TP_Possessions_O)
H2$CP_PM_perposs <- (H2$CP_PointsScored_T/H2$CP_Possessions_T) - (H2$CP_PointsScored_O/H2$CP_Possessions_O)


################ON MET EN FORME LES RESULTATS
TP_results <- data.frame(as.vector(rep(c(gameID), nrow_H1)), as.vector(rep(c(date), nrow_H1)), as.vector(rep(c(team_name), nrow_H1)), as.vector(rep(c(opp_name), nrow_H1)), as.vector(rep(c(TP_home_away), nrow_H1)), H2$TP_ID, H2$CP_ID, comp_2_TP$TP_T_l, comp_2_TP$CP_T_l, comp_2_TP$TP_O_l, comp_2_TP$CP_O_l, comp_2_TP$TP_T_l_players, comp_2_TP$CP_T_l_players, comp_2_TP$TP_O_l_players, comp_2_TP$CP_O_l_players, H2$TP_n, H2$CP_n, H2$TP_StartTime, H2$TP_EndTime, H2$TP_ElapsedTime, H2$CP_StartTime, H2$CP_EndTime, H2$CP_ElapsedTime, H2$TP_Possessions_T, H2$TP_Possessions_O, H2$CP_Possessions_T, H2$CP_Possessions_O, H2$TP_PointsScored_T, H2$TP_PointsScored_O, H2$CP_PointsScored_T, H2$CP_PointsScored_O, H2$TP_PM_raw, H2$CP_PM_raw, H2$TP_PM_perposs, H2$CP_PM_perposs)
names(TP_results) <- c("gameID", "date", "team_name", "opp_name", "TP_Home/Away", "TP", "CP", "TP_team", "CP_team", "TP_opp", "CP_opp", "TP_team_players", "CP_team_players", "TP_opp_players", "CP_opp_players", "TP_n", "CP_n", "TP_StartTime", "TP_EndTime", "TP_ElapsedTime", "CP_StartTime", "CP_EndTime", "CP_ElapsedTime", "TP_Possessions_T", "TP_Possessions_O", "CP_Possessions_T", "CP_Possessions_O", "TP_PointsScored_T", "TP_PointsScored_O", "CP_PointsScored_T", "CP_PointsScored_O", "TP_PM_raw", "CP_PM_raw", "TP_PM_perposs", "CP_PM_perposs")
TP_results

TP_results_raw <- TP_results[order(TP_results$CP),]
TP_results_raw


##ALL THINGS BEING EQUAL ("ATBE")
TP_results_ATBE <- subset(TP_results_raw, TP_results_raw$TP_opp == TP_results_raw$CP_opp)
TP_results_ATBE


##
result[[k]] <- list(gameID = gameID, TP_home_away = TP_home_away, team_name = team_name, opp_name = opp_name, date = date, T_lineups = T_lineups, O_lineups = O_lineups, T_l_unique = T_l_unique, O_l_unique = O_l_unique, comp_all_raw = comp_all_raw, comp_all = comp_all, comp_2 = comp_2, comp_2_TP = comp_2_TP, TP_raw = TP_raw, H2 = H2, TP_results_raw = TP_results_raw, TP_results_ATBE = TP_results_ATBE)

}

}

##BILAN GAMES SANS COMPARAISON "1"
w1 <- NULL
for (k in 1:length(game_ID))
if(is.atomic(result[[k]]) == TRUE) {w1[k] <- 1} else {w1[k] <- 0}

W <- data.frame(game_ID, w1)
W

sum(w1) ##nombre de games non pris en compte suivant ce critère

no_comparison_at_all <- which(W$w1 == 1)
no_comparison_at_all


##BILAN GAMES AVEC COMPARAISON "1" MAIS SANS COMPARAISON ATBE
w2 <- NULL
for (k in 1:length(game_ID))
if(k %in% no_comparison_at_all == FALSE) {w2[k] <- nrow(result[[k]]$TP_results_ATBE)} else {w2[k] <- NA}

W <- data.frame(game_ID, w1, w2)
W

w3 <- NULL
w4 <- NULL
for (k in 1:length(game_ID)) {
if(W$w2[k] == 0 & is.na(W$w2[k]) == FALSE) {w3[k] <- 1} else {w3[k] <- 0}
if(W$w2[k] != 0 & is.na(W$w2[k]) == FALSE) {w4[k] <- W$w2[k]} else {w4[k] <- 0}
}

W <- data.frame(game_ID, w1, w2, w3, w4)
W

sum(w3) ##nombre de games non pris en compte suivant ce critère

no_comparison_ATBE <- which(W$w3 == 1)
no_comparison_ATBE

sum(w4) ##nombre de comparaisons ATBE au final


##
results_ATBE_raw <- list()

for (k in 1:length(game_ID))
if(k %in% no_comparison_at_all == FALSE & k %in% no_comparison_ATBE == FALSE) {results_ATBE_raw[[k]] <- result[[k]]$TP_results_ATBE} else {results_ATBE_raw[[k]] <- NA}

results_ATBE_raw

results_ATBE_raw_OK <- do.call(rbind, results_ATBE_raw[!is.na(results_ATBE_raw)])
results_ATBE_raw_OK

nrow(results_ATBE_raw_OK)


##ON RETIRE LES COMPARAISONS IMPLIQUANT UN NOMBRE DE POSSESSIONS = 0 (PM = NaN ou  Inf)
results_ATBE_OK <- subset(results_ATBE_raw_OK, results_ATBE_raw_OK$TP_Possessions_T != 0 & results_ATBE_raw_OK$TP_Possessions_O != 0 & results_ATBE_raw_OK$CP_Possessions_T != 0 & results_ATBE_raw_OK$CP_Possessions_O != 0)


####################
return(results_ATBE_OK)

}

############################## FUNCTION END #############################

Exemple : Steve Nash (#8)

x <- qepm(8)

head(x)
##    gameID     date team_name opp_name TP_Home/Away TP  CP TP_team CP_team
## 3      14 20071101       PHX      SEA         Away  8 488       6       3
## 1      38 20071104       PHX      CLE         Home  8  16       5       1
## 7      38 20071104       PHX      CLE         Home  8 486       4       1
## 23     50 20071106       PHX      CHA         Away  8 488       8       3
## 50     75 20071109       PHX      MIA         Away  8 486       3       2
## 71     84 20071110       PHX      ORL         Away  8 488       7       4
##    TP_opp CP_opp   TP_team_players     CP_team_players
## 3       2      2  16, 7, 4, 8, 537  488, 16, 7, 4, 537
## 1       8      8  7, 12, 486, 4, 8   16, 7, 12, 486, 4
## 7       8      8   16, 7, 12, 4, 8   16, 7, 12, 486, 4
## 23     12     12 16, 486, 4, 8, 78 488, 16, 486, 4, 78
## 50      4      4   16, 7, 12, 4, 8   16, 7, 12, 486, 4
## 71      8      8  16, 12, 4, 8, 78  488, 16, 12, 4, 78
##             TP_opp_players          CP_opp_players TP_n CP_n TP_StartTime
## 3  172, 714, 715, 168, 173 172, 714, 715, 168, 173    1    1     00:32:55
## 1  561, 257, 260, 264, 265 561, 257, 260, 264, 265    1    1     00:00:42
## 7  561, 257, 260, 264, 265 561, 257, 260, 264, 265    1    1     00:15:16
## 23  307, 126, 117, 90, 111  307, 126, 117, 90, 111    1    1     00:31:56
## 50 243, 201, 206, 185, 196 243, 201, 206, 185, 196    1    1     00:41:00
## 71 245, 277, 419, 149, 170 245, 277, 419, 149, 170    1    1     00:15:38
##    TP_EndTime TP_ElapsedTime CP_StartTime CP_EndTime CP_ElapsedTime
## 3    00:31:50             65     00:33:18   00:32:55             23
## 1    00:00:00             42     00:14:46   00:12:00            166
## 7    00:14:46             30     00:14:46   00:12:00            166
## 23   00:30:40             76     00:32:44   00:31:56             48
## 50   00:39:06            114     00:15:18   00:14:58             20
## 71   00:14:42             56     00:14:42   00:12:00            162
##    TP_Possessions_T TP_Possessions_O CP_Possessions_T CP_Possessions_O
## 3                 3                2                1                1
## 1                 2                2                7                6
## 7                 2                2                7                6
## 23                3                3                2                3
## 50                4                4                1                1
## 71                2                2                5                5
##    TP_PointsScored_T TP_PointsScored_O CP_PointsScored_T CP_PointsScored_O
## 3                  0                 2                 0                 3
## 1                  2                 3                 7                 5
## 7                  3                 3                 7                 5
## 23                 2                 0                 0                 4
## 50                 3                 4                 0                 0
## 71                 4                 0                 2                 4
##    TP_PM_raw CP_PM_raw TP_PM_perposs CP_PM_perposs
## 3         -2        -3    -1.0000000    -3.0000000
## 1         -1         2    -0.5000000     0.1666667
## 7          0         2     0.0000000     0.1666667
## 23         2        -4     0.6666667    -1.3333333
## 50        -1         0    -0.2500000     0.0000000
## 71         4        -2     2.0000000    -0.4000000