subsetter un dataframe dans toutes les combinaisons possibles de 2 colonnes

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

Nicolas Romillac
Messages : 30
Enregistré le : 07 Jan 2020, 13:53

subsetter un dataframe dans toutes les combinaisons possibles de 2 colonnes

Messagepar Nicolas Romillac » 20 Avr 2022, 13:22

Bonjour à tous,
une question de manipulation de données que je n'arrives pas à résoudre.

Je possède un dataframe, par exemple de 4 colonnes A, B, C, D
et je voudrai obtenir une liste de dataframes composée de toutes les combinaisons possibles de 2 colonnes de mon dataframe originel.

C'est à dire une liste qui ressemblerait à ça:
DF1 A B
DF2 A C
DF3 A D
DF4 B C
DF5 B D
DF6 C D

Sachant que j'ai un dataframe qui fait beaucoup plus que 4 colonnes, existerait-il un moyen de créer rapidement une telle liste?
Merci d'avance!

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: subsetter un dataframe dans toutes les combinaisons possibles de 2 colonnes

Messagepar Eric Casellas » 20 Avr 2022, 14:28

Bonjour,

ci dessous 2 exemples de façon de faire (y'en a probablement plein d'autres) :

Code : Tout sélectionner

myDF <- data.frame(A = rnorm(10), B = rnorm(10), C = rnorm(10), D = rnorm(10), stringsAsFactors = FALSE); # le data.frame initial

all_combs <- combn(x = colnames(myDF), m = 2); # les paires de colonnes a combiner
# approche avec boucle for
newlist <- vector("list", ncol(all_combs));
names(newlist) <- paste0("DF", 1:ncol(all_combs));
for (i in 1:ncol(all_combs)) {
  newlist[[paste0("DF", i)]] <- myDF[, all_combs[, i]];
}
# alternative en utilisant lapply
newlist2 <- lapply(1:ncol(all_combs), function(x){myDF[, all_combs[, x]]});
names(newlist2) <- paste0("DF", 1:ncol(all_combs));
Eric

Nicolas Romillac
Messages : 30
Enregistré le : 07 Jan 2020, 13:53

Re: subsetter un dataframe dans toutes les combinaisons possibles de 2 colonnes

Messagepar Nicolas Romillac » 20 Avr 2022, 15:36

Merci beaucoup!

Gabriel Terraz
Messages : 591
Enregistré le : 26 Sep 2011, 15:11

Re: subsetter un dataframe dans toutes les combinaisons possibles de 2 colonnes

Messagepar Gabriel Terraz » 20 Avr 2022, 18:43

On peut aussi passer directement une fonction à combn() :

Code : Tout sélectionner

df = data.frame(a = 1:3, b = 2:4, c = 3:5)

combn(names(df), 2, FUN = function(x) df[, x], simplify = FALSE)
             

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

Re: subsetter un dataframe dans toutes les combinaisons possibles de 2 colonnes

Messagepar Mickael Canouil » 21 Avr 2022, 08:25

Basé sur la version de Gabriel, on peut avoir un code encore plus simple.

Code : Tout sélectionner

df <- data.frame(1:32:43:5)
combn(df2simplify FALSE)
#> [[1]]
#>   a b
#> 1 1 2
#> 2 2 3
#> 3 3 4
#> 
#> [[2]]
#>   a c
#> 1 1 3
#> 2 2 4
#> 3 3 5
#> 
#> [[3]]
#>   b c
#> 1 2 3
#> 2 3 4
#> 3 4 5 
Mickaël
mickael.canouil.fr | rlille.fr

Gabriel Terraz
Messages : 591
Enregistré le : 26 Sep 2011, 15:11

Re: subsetter un dataframe dans toutes les combinaisons possibles de 2 colonnes

Messagepar Gabriel Terraz » 21 Avr 2022, 12:18

Ah oui effectivement, je n'y avais pas pensé !


Retourner vers « Questions en cours »

Qui est en ligne

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