IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

R Discussion :

Condition if pour comparer du texte


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 3
    Par défaut Condition if pour comparer du texte
    Bonjour à tous,

    Me voilà bloqué dans mon projet en R. Je ne sais pas comment écrire ma condition du if pour qu'il me compte le nombre de fois que j'ai l'expression : {"equipment":[]} dans ma colonne "ressources"..
    En effet, j'obtiens le warning suivant : la condition a une longueur > 1 et seul le premier élément est utilisé

    Bien à vous,

    HugoNom : Capture d’écran 2019-02-19 à 14.43.31.png
Affichages : 1453
Taille : 57,1 KoNom : Capture d’écran 2019-02-19 à 14.40.47.png
Affichages : 1016
Taille : 201,4 Ko

  2. #2
    Membre éprouvé
    Homme Profil pro
    Master Data Manager
    Inscrit en
    Février 2017
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Master Data Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 113
    Par défaut
    Bonjour.

    Je suis loin d'être un expert de R, mais j'ai l'impression que vous utilisez R comme un langage procédural ce qui est peu efficace.

    Pour faire du 'comptage' dans un vecteur, vous pouvez utiliser la commande table, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # creation du dataset de test
    r <- c( '{"equipment":[]}', '{"equipment":[test1]}', '{"equipment":[test2]}', '{"equipment":[loltest]}' )
    res <- c()
    for ( i in seq( from = 1, to = 100, by = 1 ) ) {
      res <- c( res, r[round(runif(1, 1, length(r)))])
    }
    d <- data.frame( ressources = res )
     
    # comptage des ressources
    table(d$ressources)
     
    # comptage de '{"equipment":[]}'
    table(d$ressources)['{"equipment":[]}']

  3. #3
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Bonjour,

    effectivement pour être efficace en R il faut "vectoriser" au maximum ces calculs c'est a dire utiliser des fonctions qui permettent de faire la même opération sur toutes les valeurs d'un coup plus tôt que de faire les opérations valeur par valeur.
    Ici on peut directement tester si la chaîne de caractère est égale a celle que l'on recherche directement sur toutes les valeurs et ensuite de faire la somme de ce vecteur logique parce que les TRUE vont se transformer en 1 et les FALSE en 0. Après on peut aussi essayer de chercher si la chaîne de caractère qui nous intéresse est comprise dans notre texte avec la fonction grepl qui du coup peut amener plus de flexibilité mais qui va demander de faire attention au métacaractère et de placer des antislashs devant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    r <- c( '{"equipment":[]}', '{"equipment":[test1]}', '{"equipment":[test2]}', '{"equipment":[loltest]}' )
    j <- sum(r == '{"equipment":[]}')
    # ou 
    j <- sum(grepl('\\{"equipment":\\[\\]\\}', r))
     
    # pour avoir k
    length(r)-j
    Pour ton tableau ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    j <- sum(grepl('\\{"equipment":\\[\\]\\}', summary[, "ressources"]))
    k <- nrow(summary)-j
    Une remarque en passant, il est fortement déconseillé de donner pour nom d'objet le nom de fonctions de R comme summary.
    Une autre par rapport à la boucle de Puppet. Il est préférable d'initialiser un vecteur du bon mode et de la bonne longueur plutôt que de l'écraser à chaque itération avec la fonction c. Si tu veux tirer au hasard des valeurs plusieurs fois il y a la fonction sample(r, 100, replace = T) qui peut remplacer la boucle.

    cdlt

  4. #4
    Membre éprouvé
    Homme Profil pro
    Master Data Manager
    Inscrit en
    Février 2017
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Master Data Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 113
    Par défaut
    Bonjour @tototode

    Merci pour la remarque . J'en prend bonne note et je corrige le code proposé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # creation du dataset de test
    r <- c( '{"equipment":[]}', '{"equipment":[test1]}', '{"equipment":[test2]}', '{"equipment":[loltest]}' )
    d <- data.frame( ressources = sample(r, 100, replace = T) )
     
    # comptage des ressources
    table(d$ressources)
     
    # comptage de '{"equipment":[]}'
    table(d$ressources)['{"equipment":[]}']
    C'est bien plus propre ... merci encore

Discussions similaires

  1. [Toutes versions] Utiliser condition SI pour comparer une cellule avec plusieurs cellule
    Par Sir_Doreil dans le forum Excel
    Réponses: 2
    Dernier message: 19/07/2018, 08h22
  2. Réponses: 8
    Dernier message: 23/08/2016, 22h23
  3. [Batch] Deux boucles FOR pour comparer deux fichiers ligne par ligne et une condition IF
    Par Christophe.G dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 18/11/2014, 23h10
  4. Probleme pour centre du texte
    Par piff62 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/01/2005, 11h26
  5. Réponses: 2
    Dernier message: 03/06/2004, 08h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo