1. Grâce à ce formulaire vous pouvez proposer une astuce ou un script sur R.
  2. Votre script doit pouvoir être lancé en l'état. Veuillez penser à :
    • inclure le chargement des "library" nécessaires
    • construire un petit jeu de données si besoin est.
    • commenter les lignes de codes pour en faciliter la compréhension.
  3. Le titre de votre script ou astuce doit être clair et explicite.
  4. Pensez à mettre votre code entre les balises [R] et [/R]; Pour cela, vous pouvez utiliser le bouton

Vous pouvez utiliser vos comptes Facebook, twitter ou google pour vous identifer (google est compatible yahoo, openID...)
L'ideal étant de vous connecter si vous avez un compte utilisateur, ou faire une demande de compte utilisateur si vous n'en avez pas encore.
Créer un compte va vous permettre de pouvoir éditer vos codes et de mettre en avant votre site internet.
Sinon vous pouvez soumettre anonymement en remplissant les champs ci-après.







Choisissez les catégories correspondantes à votre Code:

  • algorithmique
  • Analyse de survie
  • base indispensable
  • bayésien
  • configuration de R
  • exportation de données
  • fonctions utiles
  • graphique
  • importation de données
  • inférence
  • manipulation de données
  • message d'erreur
  • modélisation
  • Non classé
  • optimisation
  • planification
  • programmer avec R
  • regression linéaire
  • Test
  • tidyverse
  • Transformation de données


Votre recherche:

Comment coller des colonnes ou des lignes pour obtenir un data.frame ? : cbind.data.frame, rbind.data.frame

0
dans fonctions utiles, manipulation de données
- ça ne sert à rien -- c\'est interessant - (score de +1 sur 3 votes)
Loading ... Loading ...

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.frame

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment rajouter des lignes ou des colonnes dans des jeux de données sous R ? : cbind, rbind

0
dans Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +4 sur 14 votes)
Loading ... Loading ...
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")
deuxcolonnes
 
rescol<-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)
deuxlignes
 
reslign<-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 numeric donnera des NA)




Proposé par Vincent.

Pas encore de commentaire, cliquez ici pour réagir.

Comment obtenir un data.frame à partir d’un tableau croisé ? : as.data.frame

0
dans Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +1 sur 3 votes)
Loading ... Loading ...

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
 
 

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment obtenir un tableau croisé ? : table, xtabs

0
dans fonctions utiles, manipulation de données, Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +5 sur 5 votes)
Loading ... Loading ...

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
 
 
 

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment fusionner deux data.frame ? : merge

2
dans fonctions utiles, manipulation de données, Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +4 sur 4 votes)
Loading ... Loading ...

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 » est la variable classe.
 

 

On obtient :

 

 
 
merge(eleves,caract_classe,by="classe") #La clé est la variable "ville"
  classe age  prenom moyenne effectif moyenne de la classe
1   3eme  14   cyril     8.6       33                 10.9
2   4eme  13 nicolas    14.2       36                 10.6
3   6eme  11   simon    12.1       29                 10.2
 
 

 

Proposé par Helene F.

Déjà 2 commentaires. Cliquez ici pour réagir.

Comment faire des comptages dans un data.frame ? apply, lapply, sapply, which

0
dans fonctions utiles
- ça ne sert à rien -- c\'est interessant - (score de +1 sur 1 votes)
Loading ... Loading ...

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 :

 
### Dans un tableau :
iris2 <- as.matrix(iris) # On convertie la base de données en matrice
iris2[,1] <- as.numeric(iris2[,1]) # On convertie la colonne en données numériques
length(which(iris2[,1]>5)) # On obtient le nombre sépales dont la longueur est supérieur à 5
### Dans une matrice :
apply(m, 2, function(x) length(x[x<0])) # Nombre d’éléments négatifs
apply(m, 2, function(x) length(x[x > 1.5])) # Nombre d’éléments supérieur à 1,5
 
 

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment utiliser la parallélisation des calculs avec R ?: foreach

2
dans algorithmique, fonctions utiles, programmer avec R
- ça ne sert à rien -- c\'est interessant - (score de +5 sur 5 votes)
Loading ... Loading ...
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))})
 
 

Proposé par Vincent.

Déjà 2 commentaires. Cliquez ici pour réagir.

Comment calculer une moyenne par groupe avec R ? ave

1
dans fonctions utiles, manipulation de données
- ça ne sert à rien -- c\'est interessant - (score de +8 sur 12 votes)
Loading ... Loading ...
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)
data
attach(data)
cbind(data,ave(score,genre)) 
 
 


L’efficacité d’ave se retrouve surtout sur les tres gos jeux de données…

Proposé par vincent.

1 commentaire. Cliquez ici pour réagir.

Comment utiliser apply dans R ?

1
dans base indispensable, fonctions utiles, manipulation de données, Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +2 sur 8 votes)
Loading ... Loading ...
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écisant la fonction et s’il faut le prendre en ligne ou en colonne.


 
 data(iris)
# on va fabriquer une fonction qui, pour chaque ligne, nous donnera la somme de Sepal.Length, Sepal.Width, Petal.Length et Petal.Width
 
masomme<-function(monvec){
# les vecteurs sont ici de la forme c(5.1,3.5,1.4,0.2, setosa). Un simple sum(monec) ne fonctionnerait pas à cause de setosa
return(sum(as.numeric(monvec[1:4])))# le as.numeric permet de passer outre la transformation en caractères
}
lasomme<-apply(data.frame(iris),FUN=masomme,MARGIN=1)
head(cbind(iris,lasomme))# on rajoute une colonne avec le résultat et on regarde le début du jeu de données 
 
 
 



Cette transformation restera très rapide même avec un très grand nombre de lignes

Proposé par pierre.

1 commentaire. Cliquez ici pour réagir.
Formation logiciel R