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 :

sélection des lignes d'un tableau


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut sélection des lignes d'un tableau
    Bonjour,

    J'aimerai faire apparaitre les lignes d'un tableau dont la valeur dans les colonne "Un", "Deux" ou "Trois" est égale a "i" ou a "iW"

    Voici mon tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Un <- c(3,"3W",10,5,5)
    Deux<-c(5,10,5,3,1)
    Trois<-c(4,4,4,4,3)
    matrice <- matrix(c(Un,Deux,Trois), nrow=5, ncol=3)
    # Et des colonnes
    colnames(matrice) <- c("Un","Deux", "Trois")
    Comment faire?

    Merci par avance

  2. #2
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ?which
    ?grep
    ?`==`
    ?`%in%`
    ?`[`
    HTH

    Vincent

  3. #3
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    Merci, mais j'ai déjà essayé tout ça et ça suffit pas. La solution est plus complexe qu'il n'y parait au premier regard.

    Je n'y arrive vraiment pas, il y a toujours quelque chose qui rate.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 339
    Points
    339
    Par défaut
    Hello,

    Juste pour être bien certain, dans l'exemple que vous donnez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > matrice
         Un   Deux Trois
    [1,] "3"  "5"  "4"  
    [2,] "3W" "10" "4"  
    [3,] "10" "5"  "4"  
    [4,] "5"  "3"  "4"  
    [5,] "5"  "1"  "3"
    Si i=3 alors la fonction doit donner 1 2 4 5 comme solution... c'est correct ?

    Si oui, voici une proposition de solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i <- 3
    which(apply(matrix(as.character(matrice) %in% c(i,paste(i,"W",sep="")) ,ncol=ncol(matrice)),1,sum)>0)

  5. #5
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    Merci! dans l'exemple votre code marche merveilleusement bien.
    J'ai remplacé "matrice" par "matrice[,1:3]" pour choisir les colonnes où chercher (dans le cas d'un tableau plus grand).

    Malheureusement, après avoir adapté le code à un fichier csv, R me répond :

    [1] Chiffre Un Deux Trois
    <0 lignes> (ou 'row.names' de longueur nulle)
    voici mon code complet:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    num<-c(1:5)
    Un <- c(3,"3W",10,5,5)
    Deux<-c(5,10,5,3,1)
    Trois<-c(4,4,4,4,3)
    matrice <- matrix(c(num,Un,Deux,Trois), nrow=5, ncol=4)
     
    # Nom des colonnes
    colnames(matrice) <- c("Chiffre","Un","Deux", "Trois")
     
    matrice
     
    #i ou iW dans les colonnes un deux ou trois
    matrice[which(apply(matrix(as.character(matrice[,1:3]) %in% c(i,paste(i,"W",sep="")) ,ncol=ncol(matrice[,1:3])),1,sum)>0),]
     
    #enregistre
    write.table (matrice, file = "TEST.csv", sep=",",row.names=FALSE, na="")
     
    #efface mémoire
    rm(list=ls())
     
    #Lecture du fichier ou trouver les informations
    echantillon<-read.csv("TEST.csv")
     
    echantillon
     
    i<-4
     
    echantillon[which(apply(matrix(as.character(echantillon[,2:4]) %in% c(i,paste(i,"W",sep="")) ,ncol=ncol(echantillon[,2:4])),1,sum)>0),]
    Je retombe toujours sur ce problème. Pourquoi ?

  6. #6
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    J'ai trouvé!
    Après ouverture du fichier, je dois le transformer en matrice.

    Mais je ne sais absolument pas pourquoi. Quelqu'un aurait le courage de m'expliquer?

    Merci par avance.

  7. #7
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    ligne 25, insérer :
    ensuite lire :
    paragraphe "Value"

    Ce qui devrait vous donner la réponse à votre question.

    HTH

    Vincent

    PS : on peut faire une fonction qui indique le nombre de lignes sans utiliser apply (à compléter et à tester parce que là, il n'y a aucune vérif des arguments, etc et ça ne marche que si mat est une matrice)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    test <- function(expr.reg, mat) {
     lignes <- grep(expr.reg, mat) %% nrow(mat)
     lignes[which(lignes == 0)] <- nrow(mat)
     return(unique(sort(lignes)))
    }
     
    test("3W?", matrice)

  8. #8
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    ligne 25, insérer :
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part
    class(echantillon)
    ensuite lire :
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part
    ?read.csv
    paragraphe "Value"
    Ce qui devrait vous donner la réponse à votre question.
    Merci pour ces conseils. Je les ai suivi et constaté qu’après ouverture, read.csv retournait un data frame.
    D’après ce que j'ai pu comprendre de l'aide, colClasses permettrait de corriger cela.
    J'ai donc entré:
    echantillon<-read.csv("TEST.csv",header = TRUE, colClasses = "matrix")

    Mais les résultats n'ont pas suivi...
    Et je n'ai pas compris pourquoi une matrice est nécessaire, plutôt qu'un data frame...

    Désolé

    on peut faire une fonction qui indique le nombre de lignes sans utiliser apply
    L'idée est très bonne, mais je n'ai pas le niveau pour me rendre compte de l'intérêt. apply est moins valable qu'une fonction?

  9. #9
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Non la fonction était juste une suggestion. C'est vous qui voyez.

    colClasses est un argument qui permet de préciser le type de chaque colonne du data.frame, pas de changer le data.frame en lui même. Il faut donc utiliser as.matrix par exemple si vous voulez reconvertir le data.frame en matrice.

    Votre exemple part d'une matrice mais vous pourriez très bien utiliser un data.frame. C'est à vous de voir quel type d'objet est le mieux adapté à votre problème et à vos données.

    HTH

    Vincent

  10. #10
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    Cette fois j'ai compris, merci!

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

Discussions similaires

  1. [XL-2010] Trier des lignes d'un tableau à partir d'une sélection listbox
    Par JulienLeno dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 19/10/2011, 16h00
  2. Ordre de sélection des lignes sur une table DB2
    Par Pierre Formosa dans le forum DB2
    Réponses: 1
    Dernier message: 26/04/2006, 20h03
  3. [HTML] Hauteur des lignes d'un tableau
    Par leloup84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 06/03/2006, 10h46
  4. Cacher des lignes d'un tableau
    Par frechy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 18/07/2005, 12h05
  5. [C#] Affichage des lignes dans un tableau.
    Par maldufleur dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/04/2004, 11h28

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