5 min read

IAF över omgång 5, Björken

Introduktion

Med hjälp av R-programmering och PBN-filer beräknas IAF över en hel omgång, tre spelkvällar med två halvlekar i varje. Eftersom parsammansättningar varierar över omgångar så är beräkningarna gjorda per spelare.

Läs in PBN-filerna

knitr::opts_chunk$set(echo = TRUE, comment = "")
library(PBN)
dat <- list()
pat <- "~/Bridgesystem/PBN/Test/"
source(paste0(pat, "tot_pbn.R"))
dat[[1]] <- tot_pbn(paste0(pat, "2025-04-03a.pbn"))
dat[[2]] <- tot_pbn(paste0(pat, "2025-04-03b.pbn"))
dat[[3]] <- tot_pbn(paste0(pat, "2025-04-10a.pbn"))
dat[[4]] <- tot_pbn(paste0(pat, "2025-04-10b.pbn"))
dat[[5]] <- tot_pbn(paste0(pat, "2025-04-24a.pbn"))
dat[[6]] <- tot_pbn(paste0(pat, "2025-04-24b.pbn"))

Hitta alla spelares MID

id <- dat[[1]][, 1]
for (i in 2:6){
    id <- c(id, dat[[i]][, 1])
}

Fyll resultattabell

Sex halvlekar H1, \(\ldots\) H6.

player <- unique(id)
n.p <- length(player)
n.r <- 6 ## Antal ronder (halvlekar)
res <- matrix(NA, n.p, n.r)
rownames(res) <- player
colnames(res) <- paste0("H", 1:n.r)
##
rad <- 0
for(pl in player){
    ##cat("Player ", pl, "\n")
    rad <- rad + 1
    for (H in 1:n.r){
        if (pl %in% dat[[H]][, 1]){
            rw <- which(pl == dat[[H]][, 1])
      ##      cat("rw = ", rw, "\n")
            res[rad, H] <- dat[[H]][rw, 2]
        }
    }
}
print(res)
          H1    H2    H3    H4    H5    H6
202008  3.09 -0.37  1.29  3.15 -1.30 -0.53
86586   3.09 -0.37    NA    NA -1.30 -0.53
15363   2.87  3.10  1.59 -1.25  0.44  3.26
13326   2.87  3.10  1.59 -1.25    NA    NA
19673   2.40 -1.78 -1.59  1.37 -0.63 -3.26
38619   2.40 -1.78 -1.59  1.37 -0.63 -3.26
62721   1.37 -0.49    NA    NA    NA    NA
85224   1.37 -0.49    NA    NA    NA    NA
45698   1.16  0.37  1.06  0.89    NA    NA
17630   1.16  0.37  1.06  0.89 -0.08    NA
55268   1.16  1.13    NA    NA  0.08  0.93
36317   1.16  1.13  1.29  3.15  0.08  0.93
203648  1.09 -1.48  1.21 -2.46    NA    NA
33386   1.09 -1.48  1.21 -2.46  2.78  0.53
10752   0.81 -2.36  0.77 -0.45 -4.39 -0.27
9714    0.81 -2.36    NA    NA -4.39 -0.27
5401    0.76  1.50  1.11  0.00  0.44  3.26
84341   0.76  1.50  1.11  0.00    NA    NA
30068   0.05  1.48    NA    NA -0.77 -0.81
84354   0.05  1.48 -1.11 -0.39 -0.77 -0.81
5421   -0.05 -1.50 -1.11 -0.39    NA    NA
6737   -0.05 -1.50    NA    NA -1.40 -2.13
17450  -0.76 -1.48 -0.22  1.25  0.77  2.13
12039  -0.76 -1.48 -0.22  1.25  0.77  2.13
32414  -0.81  0.49 -0.77  0.13 -2.06 -0.05
13938  -0.81  0.49 -0.22 -1.20 -0.36  0.05
49619  -1.09 -1.13    NA    NA    NA    NA
54501  -1.09 -1.13 -0.37  2.46 -0.08    NA
68246  -1.16  3.01 -1.29 -0.89 -2.33 -0.93
86422  -1.16  3.01    NA    NA  2.33 -2.13
90727  -1.16  1.48    NA    NA    NA    NA
68333  -1.16  1.48    NA    NA    NA    NA
3736   -1.37  2.36 -1.59  1.18  2.06  1.07
6210   -1.37  2.36 -1.59  1.18  2.06  1.07
16956  -2.40 -3.10 -0.77  0.13    NA    NA
89018  -2.40 -3.10    NA    NA    NA    NA
15930  -2.87  1.78  1.42  0.00  0.63 -0.15
14818  -2.87  1.78  1.42  0.00  0.63 -0.15
203438 -3.09 -3.01 -1.06 -3.15 -2.78    NA
202011 -3.09 -3.01 -1.06 -3.15    NA    NA
3191      NA    NA  2.04 -0.13  0.77  1.58
82732     NA    NA  2.04 -0.13    NA    NA
11072     NA    NA  1.59  1.20  4.39 -1.58
9553      NA    NA  1.59  1.20  4.39 -1.58
5409      NA    NA  0.77 -0.45  0.77  1.58
203445    NA    NA  0.37  0.36 -2.78    NA
203441    NA    NA  0.37  0.36    NA    NA
18637     NA    NA  0.22  0.39 -0.44  0.15
6676      NA    NA  0.22  0.39 -0.44  0.15
15204     NA    NA  0.22 -1.18 -0.77  0.27
12766     NA    NA  0.22 -1.18 -0.77  0.27
12506     NA    NA -0.22 -1.20 -0.36  0.05
200584    NA    NA -0.37  2.46  1.30  2.13
200583    NA    NA -1.21 -0.36    NA    NA
200582    NA    NA -1.21 -0.36    NA    NA
36321     NA    NA -1.29 -0.89    NA    NA
93895     NA    NA -1.42 -1.37 -1.40 -2.13
13087     NA    NA -1.42 -1.37    NA    NA
60863     NA    NA -2.04  0.45 -2.06 -0.05
8406      NA    NA -2.04  0.45    NA    NA
27023     NA    NA    NA    NA  2.78  0.53
13794     NA    NA    NA    NA  2.33 -2.13
14040     NA    NA    NA    NA  1.40  0.81
61733     NA    NA    NA    NA  1.40  0.81
200585    NA    NA    NA    NA  1.30  2.13
85226     NA    NA    NA    NA  0.36 -1.07
92512     NA    NA    NA    NA  0.36 -1.07
203439    NA    NA    NA    NA -2.33 -0.93

Summera och sortera

res1 <- cbind(res, rep(NA, nrow(res)), rep(NA, nrow(res)))
colnames(res1) <- c(colnames(res), c("Spelade", "IAF"))
for (rad in 1:nrow(res1)){
    spe <- sum(!is.na(res1[rad, ]))
    medel <- mean(res1[rad, ], na.rm = TRUE)
    res1[rad, n.r + 1] <- spe
    res1[rad, n.r + 2] <- round(medel, 2)
}
ord <- order(res1[, "IAF"], decreasing = TRUE)
res1 <- res1[ord, ]
out <- data.frame(MID = rownames(res1), 
                  Spelade = res1[, "Spelade"],
                  IAF = res1[, "IAF"])
rownames(out) <- 1:nrow(out)

Vi respekterar GDPR, så namnen i resultatlistan är ersatta med MID. Dessutom är resultatlistan beräknad per spelare, inte per par. Parsammansättningar kan ju variera över spelkvällarna.

Så IAF över femte omgången blir

print(out)
      MID Spelade   IAF
1  200585       2  1.71
2   15363       6  1.67
3   27023       2  1.65
4   13326       4  1.58
5   11072       4  1.40
6    9553       4  1.40
7  200584       4  1.38
8   36317       6  1.29
9    5401       6  1.18
10  14040       2  1.10
11  61733       2  1.10
12   3191       4  1.06
13  82732       2  0.96
14 202008       6  0.89
15  45698       4  0.87
16  84341       4  0.84
17  55268       4  0.82
18  17630       5  0.68
19   5409       4  0.67
20   3736       6  0.62
21   6210       6  0.62
22  86422       4  0.51
23  62721       2  0.44
24  85224       2  0.44
25 203441       2  0.36
26  33386       6  0.28
27  17450       6  0.28
28  12039       6  0.28
29  86586       4  0.22
30  90727       2  0.16
31  68333       2  0.16
32  15930       6  0.13
33  14818       6  0.13
34  13794       2  0.10
35  18637       4  0.08
36   6676       4  0.08
37  30068       4 -0.01
38  54501       5 -0.04
39  84354       6 -0.26
40  13938       6 -0.34
41  15204       4 -0.36
42  12766       4 -0.36
43  85226       2 -0.36
44  92512       2 -0.36
45 203648       4 -0.41
46  12506       4 -0.43
47  32414       6 -0.51
48  19673       6 -0.58
49  38619       6 -0.58
50  68246       6 -0.60
51 203445       3 -0.68
52   5421       4 -0.76
53 200583       2 -0.78
54 200582       2 -0.78
55   8406       2 -0.80
56  60863       4 -0.92
57  10752       6 -0.98
58  36321       2 -1.09
59  49619       2 -1.11
60   6737       4 -1.27
61  13087       2 -1.40
62  16956       4 -1.53
63   9714       4 -1.55
64  93895       4 -1.58
65 203439       2 -1.63
66 202011       4 -2.58
67 203438       5 -2.62
68  89018       2 -2.75

Fel och misstag i programmeringen rapporteras till gb(at)ehar(dot)se.