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 :

Extraire ligne en fonction chaine caractere (colonne facteur)


Sujet :

R

  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur environnement
    Inscrit en
    Septembre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur environnement

    Informations forums :
    Inscription : Septembre 2007
    Messages : 90
    Points : 68
    Points
    68
    Par défaut Extraire ligne en fonction chaine caractere (colonne facteur)
    Bonjour,

    J'ai encore besoin de vos lumières !
    J'ai besoin d'extraire des lignes en fonction de certaines valeurs dans une colonne "factor" nommée navire.
    C'est une colonne avec des nombres et des chaines de caractères par exemple :

    111111
    111259
    321659
    AB1358
    ESP123
    123
    1258
    953214

    J'ai des milliers de lignes et pas la possibilité de le faire autrement qu'avec R
    J'ai besoin d'extraire toutes les lignes dont le numéro de navire est compris entre 100000 et 999999

    J'ai testé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    essai <- subset(x, (x$navire <999999 &  x$navire>100000))
    Bien sur cela ne marche pas car ma colonne n'est pas entièrement numérique......
    HELP !

    Merci pour votre aide.
    A+

    Muriel.

  2. #2
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Commentaire sur le code : La fonction subset est faite pour éviter de coder le nom du tableau et celui de la colonne dans le test. Donc l'écriture correcte de l'appel est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    essai <- subset(x, (navire <999999 & navire>100000))
    Réponse à la question : Si les valeurs cherchées sont numériques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subset( x, as.numeric( as.character( navire)) < 999999 & as.numeric( as.character( navire)) > 1000000)
    Les valeurs non numériques sont transformées en NA avec un message.
    Si ce sont des chaines de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subset( x, navire %in% c( "chaine1", ...))

  3. #3
    Membre du Club
    Femme Profil pro
    Ingénieur environnement
    Inscrit en
    Septembre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur environnement

    Informations forums :
    Inscription : Septembre 2007
    Messages : 90
    Points : 68
    Points
    68
    Par défaut
    Bonjour Faubry,

    Merci pour ta solution qui correspond à ce que je veux !
    Mais je n'arrive pas à me débarrasser des autres valeurs mises en NA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    essai <- subset(x, !Navire=="NA")
    Quand je fais un "table" avant et après cette ligne de code, j'ai les occurrences dont je ne veux pas qui sont à 0
    Elles ne sont même pas en NA

    Qu'en penses-tu ?

    Muriel.

  4. #4
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    NA est une valeur spéciale qui signifie qu'on ne sait rien sur la valeur de la variable donc qu'elle n'est ni vraie ni fausse. De ce fait un test de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    val == NA
    # ou
    val != NA
    donne obligatoirement NA quelque soit le contenu de la variable val.
    Pour tester si une variable a comme valeur NA, il faut utiliser la fonction is.na. Ainsi, ton code doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    essai <- subset( x, !is.na( Navire))
    De plus, si on cherche les lignes où toutes les colonnes x1 à xN ont des valeurs (autres que NA), la fonction complete.cases est utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lignes.completes <- complete.cases( tab[,c( "x1", ..., "xN")])

    De même, on peut tester si une variable n'a aucune valeur, donc si elle est vide, par la fonction is.null ou par length( val) == 0.

    Enfin, pour se débarrasser des niveaux des facteurs dont les effectifs sont nuls, il faut utiliser la fonction droplevels à appliquer sur le data.frame résultat. En effet, subset ne conserve que les lignes correspondant au critère mais ne modifie pas la description du facteur puisque les niveaux sont une propriété du facteur et non du data.frame qui n'est qu'une réalisation particulière d'un ensemble d'observations.

  5. #5
    Membre du Club
    Femme Profil pro
    Ingénieur environnement
    Inscrit en
    Septembre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur environnement

    Informations forums :
    Inscription : Septembre 2007
    Messages : 90
    Points : 68
    Points
    68
    Par défaut
    Merci beaucoup pour tous ces conseils !
    J'ai testé le is.na et cela n'a rien donné
    Le droplevel a l'air de faire ce que j'attends.

    Merci et à bientôt.
    Muriel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression de ligne en fonction d'une colonne
    Par PPLILH2008 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/06/2008, 10h43
  2. [Tableaux] Extraire valeur d'une chaine de caractere
    Par Shandler dans le forum Langage
    Réponses: 10
    Dernier message: 20/03/2008, 10h57
  3. Réponses: 1
    Dernier message: 10/02/2008, 19h56
  4. Supprimer lignes en fonction d'une colonne
    Par eillon dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/12/2007, 11h15
  5. Recherche de la dernière ligne en fonction d'un code en debut de colonne
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/08/2007, 16h01

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