Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre actif
    Remplacements multiples dans une expression régulière
    Bonjour,
    J'ai un vecteur V qui contient des "Oui" ou des "Non" (ou rien)

    Je voudrais remplacer les Oui par O et les non par N.

    J'ai pensé faire quelque chose comme ça, avec un double appel à gsub() : gsub("Oui","O",gsub("Non","N",c("Oui","Non","Non","Oui","","Non","","","Oui",""))).

    Mais il me semble avoir vu quelque part qu'il était possible de conditionner gsub pour qu'elle remplace par un certain mot si elle rencontre le 1er pattern, et par un second mot si elle rencontre le 2ème pattern.

    On aurait quelque chose comme gsub("(Oui)|(Non)","(O)|(N)",V).
    Mais cette écriture ne donne pas ce que je veux (le même résultat que précédemment).

    Est-ce que quelqu'un aurait une petite idée sur la façon de procéder ?

  2. #2
    Membre confirmé
    Bonjour,

    je ne serai pas le faire directement avec gsub en appliquant différent pattern de remplacement. Tu as plusieurs possibilités :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # en deux fois
    x <- c("Oui","Non","Non","Oui","","Non","","","Oui","")
    gsub("Non", "N", gsub("Oui", "O", x))
     
    # en supprimant on ou ui :
    gsub("(on|ui)", "", x)
     
    # en supprimant les lettres minuscules
    gsub("[a-z]", "", x)
     
    # en établissant des correspondances entres N et Non, Oui et O, etc.
    c("N", "O", "")[match(x, c("Non", "Oui", ""))]
     
    # ou encore (attention à l'ordre alphabétique)
    c("", "N", "O")[factor(x)]
    cdlt

  3. #3
    Membre actif
    Super !

    Je vais conserver tes solutions avec les fonctions match() ou factor(), qui permettent de faire ce que je voulais sur d'autres types de réponses que Oui/Non.

    Merci Totocode,

###raw>template_hook.ano_emploi###