Accueil > R - Généralités > Transformer tout un data.frame en numérique
Transformer tout un data.frame en numérique
samedi 13 novembre 2021, par
Pour les débutants, une fonction bien pratique expliquée pas par pas.
J’ai un data.frame nommé [*mondata*] avec les colonnes 5 à 15 contenant des "oui" ou "non". Je voudrai, pour des raisons qui me concernent, créer un nouveau data.frame [*mondata.n*] avec les mêmes colonnes codés en numérique, 0 pour "
mondata.n <- as.data.frame(sapply(mondata[,5:15], function(x) as.numeric(x)-1))
Décorticons.
- La fonction [**sapply*] va me retourner une liste que je transforme en data.frame.
- Pour extraire des données d’un data.frame on utilise les crochets avec deux chiffres : les lignes (cas) avant la virgule & les colonnes (variables) après la virgule. Par exemple pour sortir la variable 6 on écrit :
data[,6]
et pour le cas n° 6 [1]
data[6,]
.
On peut bien entendu extraire plusieurs colonnes (ou lignes) avec par ex.
data[,c(6,8,14)]
pour ne sélectionner que les colonnes 6, 8 & 14. Comme je veux sélectionne une plage je simplifie avec
5:15
. - Par défaut les facteurs sont codés en 1,2,.... Je vais donc avoir 1 pour "
non " & 2 pour "oui " (les facteurs sont codés par ordre alphabétique sauf indication contraire). D’où le -1 pour voir un codage en 0/1. Et c’est tout. De plus comme il n’y a pas de boucle mais juste des fonctions vectorielles c’est très rapide. Et on peut faire mieux avec les packages [*purrr*] & [*dplyr*]. On utilise la fonction [**man*] qui se comporte comme une version améliorée de [**sapply*], dans sa version [**map_dfr*] qui va retourner un data.frame :
–mondata.n <- map_dfr(mondata[,5:15], as.numeric)-1
- Bon le "-1" est un peu du bricolage. Écrivons ça correctement en utilisant des pipes : chaque [**%>%*] envoie le résultat de la ligne comme premier argument de la fonction suivante.
- mondata.n <- mondata[,5:15] %>%
- 1
- trois lignes d’accord, mais c’est clair, facilement évolutif.
[1] Je ne suis pas un numéro