Trucs pour LaTeX & R

Transformer tout un data.frame en numérique

dimanche 6 mai 2018 par Philippe MICHEL

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 « non » & 1 pour « oui » (J’ai déjà expliqué pourquoi c’était une mauvaise habitude mais ça peut quand même être parfois pratique voire indispensable).
Le code est simple :

  1. 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 man_dfr qui va retourner un data.frame :

  1. mondata.n <- man_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.

  1. mondata.n <- mondata[,5:15] %>%
  2. map_dfr( as.numeric) %>%
  3. - 1

Télécharger

trois lignes d’accord, mais c’est clair, facilement évolutif.

[1Je ne suis pas un numéro


Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 7 / 128303

Suivre la vie du site fr  Suivre la vie du site R   ?    |    titre sites syndiques OPML   ?

Site réalisé avec SPIP 3.2.1 + AHUNTSIC

Creative Commons License