Plus de robustesse, plus de sécurité, nous avons nommé bind_rows et bind_cols ! Package du tidyverse, {dplyr} regorge d’outils ultra efficaces pour la manipulation de données. Parmi eux, deux petites fonctions qui, à première vue, ne payent pas de mine… et pourtant. bind_rows et bind_cols vous permettent d’effectuer l’équivalent de rbind et cbind mais sont plus fonctionnelles, et affichent des résultats plus propres et exploitables. Commençons par créer deux tableaux. Si nous tentons de les juxtaposer avec la fonction de base rbind, nous aurons une erreur. À l’inverse, bind_rows fera le job, en peuplant les « colonnes manquantes » par des NA. library(dplyr) df1 <- data.frame(a =Read More →

La fonction cbind.data.frame() permet de coller des colonnes et d’obtenir un data.frame. sechage <- factor(c(rep(« lent »,5),rep(« rapide »,5))) marque <- factor(c(rep(« Mer »,3),rep(« Cim »,3),rep(« vex »,4))) #On crée deux facteurs que l’on souhaite coller ciment <- cbind.data.frame(sechage, marque) #On colle ces deux facteurs De la même manière, la fonction rbind.data.frame() permet de coller des lignes et d’obtenir un data.frameRead More →

Lorsque l’on manipule des jeux de données on est souvent amené à vouloir rajouter des colonnes, rajouter des lignes concaténer des jeux de données… Pour rajouter des colonnes, il faut utiliser la fonction cbind. Il faut que les 2 jeux de données aient le même nombre de ligne.cbind rajoute les colonnes par la droite. deuxcolonnes<-data.frame(matrix(« x »,150,2))names(deuxcolonnes)<-c(« colonne1″, »colonne2 »)deuxcolonnesrescol<-cbind(iris,deuxcolonnes)head(rescol)  Pour rajouter des lignes il faut utiliser la fonction rbind. Contrainte : il faut avoir le même nombre de colonnes et que ces colonnes aient le même nom. deuxlignes<-data.frame(matrix(1,2,5))names(deuxlignes)<-names(iris)deuxlignesreslign<-rbind(deuxlignes,iris)head(reslign)  Il faut tout de même veiller à conserver une homogénéité dans les variables (rajouter des character dans une colonne de numericRead More →

La fonction as.data.frame() permet de passer d’un tableau croisé à un data.frame.   sechage <- factor(c(rep(« lent »,5),rep(« rapide »,5))) marque <- factor(c(rep(« Mer »,3),rep(« Cim »,3),rep(« vex »,4)))   ciment <- cbind.data.frame(sechage,marque)   tab_croise<-table(ciment$sechage,ciment$marque) #On crée un tableau croisé   tab_croise          Cim Mer vex   lent     2   3   0   rapide   1   0   4     as.data.frame(tab_croise) # On reconvertie le tableau croisé en data.frame   On obtient : as.data.frame(tab_croise)     Var1 Var2 Freq 1   lent  Cim    2 2 rapide  Cim    1 3   lent  Mer    3 4 rapide  Mer    0 5   lent  vex    0 6 rapide  vex    4  Read More →

Les fonctions table() et xtabs() permettent d’obtenir directement un tableau croisé à partir des colonnes d’un data.frame sechage <- factor(c(rep(« lent »,5),rep(« rapide »,5))) marque <- factor(c(rep(« Mer »,3),rep(« Cim »,3),rep(« vex »,4)))   ciment <- cbind.data.frame(sechage,marque) #On colle les deux variables pour obtenir un data.frame  xtabs(~sechage+marque,data=ciment)  table(ciment$sechage,ciment$marque) #Les fonctions table() et xtabs() sont équivalentes On obtient : table(ciment$sechage,ciment$marque)            Cim Mer vex   lent     2   3   0   rapide   1   0   4  Read More →

La fonction merge() permet de fusionner deux data.frame ayant une variables en commun ainsi que des données complémentaires. age <- c(11,13,14) prenom <- c(« simon », »nicolas », »cyril ») moyenne <- c(12.1,14.2,8.6) classe <- factor(c(« 6eme », »4eme », »3eme »))   eleves <- cbind.data.frame(age,prenom,classe, moyenne) #On colle les données dans un data.frame   nb_elev <- c(29,32,36,33) moy_classe <- c(10.2,11.3,10.6,10.9) caract_classe <- cbind.data.frame(c(« 6eme », »5eme », »4eme », »3eme »),nb_elev,moy_classe) #On colle les données dans un data.frame   names(caract_classe) <- c(« classe », »effectif », »moyenne de la classe ») #On attribue à chaque variable le nom que l’on désire   merge(eleves,caract_classe,by= »classe »)  #On fusionne les données dans un data.frame #La clé commune aux données est la variable « classe » #En effet, la variable commune aux data.frame « eleves » et « caract_classe » estRead More →

Les fonctions de la famille apply() et la fonction which() peuvent permettre de compter les éléments identiques, négatifs, positifs ou encore supérieurs ou inférieurs à une certaine valeur dans un data.frame. iris# iris, un tableau de données m <- matrix(data=cbind(rnorm(30, 0), rnorm(30, 2), rnorm(30, 5)), nrow=30, ncol=3) # m, une matrice de données Calculer le nombre d’éléments identiques : ### Dans un tableau :lapply (iris, function(x) length(unique(x))) # retourne une liste sapply (iris, function(x) length(unique(x))) # retourne un vecteur numérique ### Dans une matrice : apply (m, 2,function(x) length(unique(x))) #retourne des entiers Calculer le nombre d’éléments supérieurs ou inférieur à une certaine valeur : ###Read More →

la parallélisation des calculs, permet d’exploiter au maximum les capacité calculatoire de votre ordinateur en utilisant tous les core de votre machine ( dual core , quad core …)Cette facpon de proceder est rentable si le calcul que vous voulez faire prend plus de temps que le fait de mettre en place la parallélisation library(foreach)library(doSNOW) getDoParWorkers() registerDoSNOW(makeCluster(4, type = « SOCK »))# 2 , 4 ou plus en fonction de votre machine getDoParWorkers() N <- 10^4 system.time(foreach(i = 1:N,.combine = « cbind ») %do% {sum(rnorm(N))}) system.time(foreach(i = 1:N,.combine = « cbind ») %dopar% {sum(rnorm(N))})Read More →

Je viens de découvrir la fonction ave.. il s’agit d’une fonction extremement rapide qui permet de calculer une moyenne (ou autre chose..) par groupe. elle est trés efficace par rapport à des combinaisons de by et autres do.call # mettons nous dans un cas ou nous voulons calculer le score moyenne des hommes d’une part , et des femme d’autre part data<-data.frame(cbind(c(rep(« homme »,4),rep(« femme »,5)),c(1:4,3:7)))names(data)<-c(« genre », »score »)data$score<-as.numeric(data$score)dataattach(data)cbind(data,ave(score,genre)) L’efficacité d’ave se retrouve surtout sur les tres gos jeux de données…Read More →

R n’aime pas les boucles: c’est long, parfois ca plante..mais surtout c’est long :). Une des fonctions qu’il faut absolument maîtriser est apply. Elle permet de réaliser en parallèle la même opération sur toutes les lignes/ toutes les colonnes d’une matrice ou d ‘un jeu de données. Pour utiliser apply, il faut créer une fonction qui prend en paramètre un vecteur et qui nous ressort une transformation de ce vecteur. que ce vecteur soit de la forme qu’une ligne ou qu’une colonne de notre jeu de données (prendre en compte les variables quali, l’ordre des variables..) lancer apply sur son jeu de données, en précisantRead More →