développer un df avec tous les cas de figure

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Julien Demeaux
Messages : 49
Enregistré le : 23 Oct 2017, 22:24

développer un df avec tous les cas de figure

Messagepar Julien Demeaux » 25 Fév 2019, 12:05

Bonjour,

J'ai un df qui se présente ainsi:

T1HG <- c(0:10)
T1HGOdds <- dpois(0:10, 2.820458)
T2AG <- c(0:10)
T2AGOdds <- dpois(0:10, 1.155714)
df <- data.frame(T1HG, T1HGOdds, T2AG, T2AGOdds)

Les 2 premières colonnes (commençant par T1) correspondent à la probabilité d'une équipe de football de marquer 0, 1, 2... jusqu'à 10 buts lors d'un match face à l'équipe 2.
Même chose pour les 2 colonnes suivantes (T2...) mais pour l'équipe adverse.

A partir de ce df comment puis-je avoir un nouveau df qui reprendrait tous les cas de figure ?
Dans une structure comme celle-ci ?
T1HG T2AG Odds
1 0 0 v1
2 0 1 v2
3 0 2 v3
4 ...
121 10 10 v121

Merci !

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: développer un df avec tous les cas de figure

Messagepar Pierre-Yves Berrard » 25 Fév 2019, 12:44

Bonjour,

Sous réserve d'avoir bien compris :

Code : Tout sélectionner

res <- expand.grid(T1HG = 0:10, T2AG = 0:10)
res <- merge(res, df[1:2], by = "T1HG")
res <- merge(res, df[3:4], by = "T2AG")
PY

Julien Demeaux
Messages : 49
Enregistré le : 23 Oct 2017, 22:24

Re: développer un df avec tous les cas de figure

Messagepar Julien Demeaux » 25 Fév 2019, 14:48

Ca a l'air d'être ça ! Merci Pierre-Yves !
J'ai un message d'erreur à comprendre/corriger mais la logique de votre code répond à mon besoin.
Merci beaucoup

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: développer un df avec tous les cas de figure

Messagepar François Bonnot » 26 Fév 2019, 07:27

Bonjour,
Ou bien :

Code : Tout sélectionner

merge(df[1:2],df[3:4])[c(1,3,2,4)]
François

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: développer un df avec tous les cas de figure

Messagepar Mickael Canouil » 26 Fév 2019, 13:20

En complément, une proposition différente (pas "optimale"):

Code : Tout sélectionner

library(tidyverse)
df[c("T1HG", "T1HGOdds")] %>%
      dplyr::mutate(T2 = list(df[c("T2AG", "T2AGOdds")])) %>%
      tidyr::unnest()


Code : Tout sélectionner

library(tidyverse)
T1HG <- c(0:10)
T1HGOdds <- dpois(0:10, 2.820458)
T2AG <- c(0:10)
T2AGOdds <- dpois(0:10, 1.155714)
df <- data.frame(T1HG, T1HGOdds, T2AG, T2AGOdds)

benchr::benchmark(
  tidyverse = {
    df[c("T1HG", "T1HGOdds")] %>%
      dplyr::mutate(T2 = list(df[c("T2AG", "T2AGOdds")])) %>%
      tidyr::unnest()
  },
  one_merge = {
    merge(df[1:2],df[3:4])[c(1,3,2,4)]
  },
  expand = {
    res <- expand.grid(T1HG = 0:10, T2AG = 0:10)
    res <- merge(res, df[1:2], by = "T1HG")
    res <- merge(res, df[3:4], by = "T2AG")
  }
)
#> Benchmark summary:
#> Time units : microseconds
#>       expr n.eval  min lw.qu median mean up.qu  max  total relative
#>  tidyverse    100 3790  3910   4000 4130  4090 6510 413000     9.40
#>  one_merge    100  389   411    426  448   438 2660  44800     1.00
#>     expand    100  880   924    951  978   972 3070  97800     2.24


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité