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


Sélectionner des sous-ensembles de jeux de données avec la fonction subset

2
dans algorithmique, manipulation de données, programmer avec R, Transformation de données
Si l’on veut sélectionner un sous-ensemble d’un jeu de données à partir d’une condition simple étendue, d’une condition multiple exclusive, d’une condition multiple inclusive, d’une condition multiple exclusive étendue, ou d’une condition multiple inclusive étendue, il faut utiliser les opérateurs logiques OU et/ou ET.
Dans R, le ET s’écrit « & », et le OU s’écrit « | ».

Une condition simple porte sur une seule colonne.
Une condition multiple porte sur plusieurs colonnes à la fois (comme pour les régressions).
Une condition étendue porte sur l’union de plusieurs modalités/critères au sein d’une même colonne : elle utilise l’opérateur logique OU.
Une condition exclusive est une condition multiple qui porte sur l’intersection de sous-ensembles : elle utiilise l’opérateur logique ET.
Une condition inclusive est une condition multiple qui porte sur l’union de sous-ensembles : elle utilise l’opérateur logique OU.
Une condition simple ne peut, par nature, ni être exclusive, ni être inclusive.

Pour une sélection simple étendue, on utilisera l’opérateur logique OU.
Pour une sélection multiple exclusive, on utilisera l’opérateur logique ET.
Pour une sélection multiple inclusive, on utilisera l’opérateur logique OU.
Pour une sélection multiple exclusive étendue, on utilisera les opérateurs logiques OU et ET.
Pour une sélection multiple inclusive étendue, on utilisera l’opérateur logique OU.


 
 
data(iris)
head(Iris)
summary(iris)
 
### Exemple de sélection simple étendue sur une variable qualitative ###
# Il existe dans ce jeu de données 3 espèces : setosa, versicolor et virginica.
# On veut sélectionner le sous-ensemble concernant les espèces setosa OU versicolor.
iris2 = subset(iris, Species == "setosa" | Species == "versicolor") # on peut soit passer par la fonction 'subset'
iris2 = iris[iris$Species == "setosa" | iris$Species == "versicolor",] # ou soit passer par les conditions entre crochets
iris2
 
# En revanche, on ne peut pas utiliser cette syntaxe :
iris2 = subset(iris, Species == c("setosa","versicolor"))
# Ni celle-ci :
iris2 = iris[iris$Species == c("setosa","versicolor")]
# Car je ne sais pas pourquoi, mais ces syntaxes ne sélectionnent qu'une partie du sous-ensemble désiré. Cette partie a un nombre de lignes égal au nombre de lignes qui auraient été sélectionnées par une condition portant sur une seule modalité.
dim(iris2) # On a 50 lignes, alors qu'on devrait en avoir 100 !
 
 
### Exemple de sélection simple étendue sur une variable quantitative ###
# On veut sélectionner les fleurs dont la longueur du pétale est inférieure à 1,5 cm OU supérieure à 5 cm.
iris3 = subset(iris, Petal.Length <= 1.5 | Petal.Length >= 5)
iris3 = iris[iris$Petal.Length <= 1.5 | iris$Petal.Length >= 5,]
iris3
 
 
### Exemple de sélection multiple exclusive ###
# On veut sélectionner les fleurs de l'espèce setosa ET dont la longueur du pétale est inférieure à 1,5 cm.
iris4 = subset(iris, Species == "setosa" & Petal.Length <= 1.5)
iris4 = iris[iris$Species == "setosa" & iris$Petal.Length <= 1.5,]
iris4
 
 
### Exemple de sélection multiple inclusive ###
# On veut sélectionner les fleurs de l'espèce setosa OU celles dont la longueur du pétale est supérieure à 5 cm.
iris5 = subset(iris, Species == "setosa" | Petal.Length >= 5)
iris5 = iris[iris$Species == "setosa" | iris$Petal.Length >= 5,]
iris5
 
 
### Exemple de sélection multiple exclusive étendue ###
# On veut sélectionner les fleurs de l'espèce versicolor OU virginica ET dont la longueur du pétale est supérieure à 5 cm.
# Attentions, il faut alors utiliser des parenthèses !
iris6 = subset(iris, (Species == "versicolor" | Species == "virginica") & Petal.Length >= 5)
iris6 = iris[(iris$Species == "versicolor" | iris$Species == "virginica") & iris$Petal.Length >= 5,]
iris6
 
 
### Exemple de sélection multiple inclusive étendue ###
# On veut sélectionner les fleurs de l'espèce versicolor OU virginica OU celles dont la longueur du pétale est inférieure à 1,5 cm.
# Pas forcément besoin de parenthèses ici.
iris7 = subset(iris, Species == "versicolor" | Species == "virginica" | Petal.Length <= 1.5)
iris7 = iris[iris$Species == "versicolor" | iris$Species == "virginica" | iris$Petal.Length <= 1.5,]
iris7
 


Proposé par Stan.

Ce script vous à rendu service? remerciez l'auteur en votant ici:
- ça ne sert à rien -- c\'est interessant - (score de +3 sur 3 votes)
Loading ... Loading ...

2 Comments

  1. lmonto
    Posté le 7 février 2016 a 7 h 22 min | Permalink

    Bonjour, j’ai un problème pour faire un subset.J’ai un tableau avec une colonne d’identifiants d’individus(plusieurs lignes par individu), dans un autre tableau j’ai aussi une colonne avec des identifiants d’individus (une ligne par individu). j’aimerais selectionner dans le 1er tableau les lignes des individus qui sont présents dans les deux tableaux. j’ai essayé:tab<-tableau où je veux selectionner les lignestabi<-tableau avec les individus que je veux selectionner tab_f<-tab[tab$NumPit==tabi$NumPit,]  ca ne marche pas, j’ai essayé aussi avec un boucle tab_f=NULLfor (i in ( tabi$NumPit) ){      tab_f<-tab[which(tab$NumPit==i ),]   } pareil ca ne marche pas… quelqu’un pourrait il m’aider, je n’arrive pas à trouver ce cas de figure sur les différents forum, merci d’avance.Lu

  2. Vincent
    Posté le 5 novembre 2016 a 8 h 45 min | Permalink

    @imonto, typiquement le genre de cas ou il ne FAUT PAS faire de boucles. en fait tu cherche a faire un inner join ( si j’ai bien compris), regarde donc la fonction merge.

Poster un commentaire


Votre email ne seras jamais communiqué champs requis désigné par une *

*
*


− un = 1

Formation logiciel R