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 une partie des résultats de table()


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut Extraire une partie des résultats de table()
    Bonjour,

    J'utilise table() pour trouver le nombre d'éléments (mutations) qui se trouvent dans différentes catégories (des bandes cytogénétiques)

    Pour cela, j'utilise :
    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
     
    table(data_loh$cytoband)
     
     10p11.1 10p11.21 10p11.22  10p12.1  10p12.2 10p12.31    10p13    10p14 
           0        0        0        0        0        0        0        0 
     10p15.1  10p15.3 10q11.21 10q11.22 10q11.23  10q21.1  10q21.3  10q22.1 
           0        0        0        0        2        1        0        0 
     10q22.2  10q22.3  10q23.1  10q23.2 10q23.31 10q23.32 10q23.33  10q24.1 
           0        0        2        0        0        0        0        1 
     10q24.2 10q24.31  10q25.1 10q26.12 10q26.13  10q26.3 11p11.12  11p11.2 
           0        1        0        0        0        0        0        0 
       11p12  11p14.1  11p14.2  11p14.3  11p15.1  11p15.2  11p15.3  11p15.4 
           0        0        0        0        0        0        0        0 
     11p15.5    11q11  11q12.1  11q12.2  11q12.3  11q13.1  11q13.2  11q13.3 
           0        0        0        0        0        1        0        0 
     11q13.4  11q13.5  11q14.2  11q14.3  11q22.2  11q22.3  11q23.1  11q23.2 
           0        0        0        0        0        0        0        1 
     11q23.3  11q24.1  11q24.2  11q24.3  12p11.1  12p12.1  12p12.3  12p13.2 
           0        0        0        0        0        0        0        1 
    12p13.31 12p13.32 12p13.33    12q12 12q13.11 12q13.12 12q13.13  12q13.2 
           0        0        0        0        0        0        0        0 
     12q13.3  12q14.2  12q23.2  12q23.3 12q24.11 12q24.12 12q24.13 12q24.23 
           0        0        0        1        0        0        0        0 
    ....
    Les bandes où il y a 0 mutation ne m'intéressent pas. J'ai donc un résultat plus concis avec :
    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
     
    table(as.character(data_loh$cytoband))
     
    10q11.23  10q21.1  10q23.1  10q24.1 10q24.31  11q13.1  11q23.2  12p13.2 
           2        1        2        1        1        1        1        1 
     12q23.3  13q13.3 13q14.11 13q14.13  14q32.2 14q32.31  15q15.1  15q24.1 
           1        1        1        1        1        1        7        1 
     16p11.2  16p13.3  16q22.1  17p13.1  17p13.2  17q11.2    17q12 17q21.32 
           2        2        2        1        1        1        2        7 
    18p11.32 19p13.11 19p13.12  19p13.3 19q13.12  19q13.2 19q13.31 19q13.32 
           1        2        2        1        1        2        1        1 
     1p36.13  1p36.31   1q23.1   1q25.2   1q32.1 20q13.33  21q22.3  22q12.1 
           2        1        1        1        1        1        1        1 
     22q13.1  22q13.2 22q13.31   2p11.1   2p13.1     2p21     2q35   2q37.1 
           2        1        1        1        1        1        2        1 
      3p12.3   3q27.3  4q21.21  4q21.22  4q21.23   4q21.3   4q22.1   4q22.2 
           2        1        4        2        6        1       14        1 
      4q22.3     4q23     4q24     4q25     4q26     4q27   4q28.1   4q28.2 
           5        9       23       20       22        5       11        6 
      4q31.1  4q31.21  4q31.22  4q31.23   4q31.3   4q32.1   4q32.2   4q32.3 
           3        9        4        1       18        4        5       24 
        4q33   4q34.1   4q34.2   4q34.3   4q35.1   4q35.2   5q14.3   5q23.2 
           1        3        6        6       32       10        1        1 
      5q33.1   5q35.3   6p12.1   6p21.1   6p22.1     6q21  7q11.21  7q11.23 
           1        1        1        1        1        1        1        1 
      8p23.1   8q12.1   8q13.3  8q24.11   9p11.2   9p21.2     9q13   9q31.3 
           3        1        1        1        1        1        1        2 
      9q34.2     Xq23 
           2        1
    A présent, je ne souhaite conserver que les éléments avec plus de 1 mutation, et c'est là mon problème. J'essaie :
    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
     
    table(data_loh$cytoband[which(table(data_loh$cytoband)>1)])
     
     10p11.1 10p11.21 10p11.22  10p12.1  10p12.2 10p12.31    10p13    10p14 
           0        0        0        0        0        0        0        0 
     10p15.1  10p15.3 10q11.21 10q11.22 10q11.23  10q21.1  10q21.3  10q22.1 
           0        0        0        0        0        0        0        0 
     10q22.2  10q22.3  10q23.1  10q23.2 10q23.31 10q23.32 10q23.33  10q24.1 
           0        0        0        0        0        0        0        0 
     10q24.2 10q24.31  10q25.1 10q26.12 10q26.13  10q26.3 11p11.12  11p11.2 
           0        0        0        0        0        0        0        0 
       11p12  11p14.1  11p14.2  11p14.3  11p15.1  11p15.2  11p15.3  11p15.4 
           0        0        0        0        0        0        0        0 
     
    table(as.character(data_loh$cytoband[which(table(data_loh$cytoband)>1)]))
    Ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    table(as.character(data_loh$cytoband[which(table(data_loh$cytoband)>1)]))
     
    16p11.2  2p11.1  3p12.3 4q21.21    4q24    4q25    4q27  4q28.2  4q31.3  4q32.1 
          1       1       1       1       1       2       1       1       1       2 
     4q32.3  4q35.1 
          1       2
    Et autres... Mais j'ai fini par m'embrouiller dans table() et which...
    Est-il possible d'extraire des éléments de table(), en conservant le nombre d'éléments et la catégorie ? Ou faut-il le faire "à la main", dans une boucle ?

    Merci d'avance,
    Jane

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Par défaut
    Bonjour,

    Est-ce que ceci fonctionne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table(data_loh$cytoband)[ which( table(data_loh$cytoband) > 1 ) ]

    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut
    Citation Envoyé par A. D. Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table(data_loh$cytoband)[ which( table(data_loh$cytoband) > 1 ) ]
    ça marche bien, merci. Le seul petit bémol est que je "perds" la catégorie quand j'écris les résultats dans un fichier :

    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
     
    instabilite_loh=table(data_loh_instab$cytoband)[ which(table(data_loh_instab$cytoband) > 1 ) ]
    ou instabilite_loh=table(as.character(data_loh_instab$cytoband))[ which( table(as.character(data_loh_instab$cytoband)) > 1 ) ]
    write.table(instabilite_loh,"~/Code/SNPCalling/patient1/traite/instabilite_gar",quote=FALSE,row.names=FALSE, col.names=TRUE,sep="\t")
    x
    32
    24
    23
    22
    20
    18
    14
    11
    10
    9
    9
    7
    7
    ...
    Alors qu'avec :
    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
     
    instabilite_loh=table(data_loh_instab$cytoband)
    write.table(instabilite_loh,"~/Code/SNPCalling/patient1/traite/instabilite_gar",quote=FALSE,row.names=FALSE, col.names=TRUE,sep="\t")
    Var1	Freq
    4q35.1	32
    4q32.3	24
    4q24	23
    4q26	22
    4q25	20
    4q31.3	18
    4q22.1	14
    4q28.1	11
    4q35.2	10
    4q23	9
    4q31.21	9
    15q15.1	7
    ...
    Sinon, il me reste à présent une dernière chose à faire, où je suis bloquée à cause de table().
    Etant donné que plus une bande est grande, plus il est probable qu'il y ait une mutation, je souhaite diviser les fréquences par les longueurs des bandes. Je voudrais avoir un fichier résultat du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Var1	Freq  Freq_normalisée
    4q35.1	32  32/taille
    4q32.3	24  24/taille...
    4q24	23
    4q26	22
    4q25	20
    4q31.3	18
    4q22.1	14
    4q28.1	11
    4q35.2	10
    4q23	9
    4q31.21	9
    15q15.1	7
    Je ne pense pas que table() me permette ceci. J'essaie d'intégrer les résultats de table() dans un data.frame afin de manipuler les données comme je le souhaite dans la suite, mais je ne parviens pas à séparer les 2 infos...
    temp=data.frame(instabilite_loh)
    dim(temp)
    [1] 42 1
    Est-il possible de sauvegarder les catégories et les fréquences dans une variable à 2 dimensions ?

    Merci,
    Jane

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Par défaut
    Re-bonjour,

    Pour les catégories qui "disparaissent" dans le fichier de sortie, il faut passer l'argument "row.names" à TRUE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    instabilite_loh<-table(data_loh$cytoband)[ which( table(data_loh$cytoband) > 1 ) ]
    write.table(instabilite_loh,"~/Code/SNPCalling/patient1/traite/instabilite_gar",quote=FALSE,row.names=TRUE, col.names=TRUE,sep="\t")
    Ensuite, pour votre autre question, je ne suis pas sûre d'avoir bien compris : vous souhaitez diviser chacune des valeurs de votre tableau par l'effectif total du tableau?
    Si oui, vous pouvez utiliser la fonction "prop.table" comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prop.table( table(data_loh$cytoband)[ which( table(data_loh$cytoband) > 1 ) ] )
    Sinon pour sauver les infos (catégories et valeurs) dans deux variables différentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    instabilite_loh<-table(data_loh$cytoband)[ which( table(data_loh$cytoband) > 1 ) ]
     
    valeurs_instabilite_loh<-as.numeric(instabilite_loh)
     
    categories_instabilite_loh<-row.names(instabilite_loh)

    En espérant que ceci vous aide, sinon n'hésitez pas à donner plus de précisions.


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut
    Citation Envoyé par A. D. Voir le message
    Re-bonjour,

    Ensuite, pour votre autre question, je ne suis pas sûre d'avoir bien compris : vous souhaitez diviser chacune des valeurs de votre tableau par l'effectif total du tableau?
    Si oui, vous pouvez utiliser la fonction "prop.table" comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prop.table( table(data_loh$cytoband)[ which( table(data_loh$cytoband) > 1 ) ] )
    Bonjour,

    Je ne veux pas diviser mes fréquences par l'effectif total, je veux "normaliser" mon nombre de mutations.
    Exemple : Une zone de 100 mutations dans une bande cytogénétique de 1000 nucléotides ne sera pas plus "grave" qu'une zone de 10 mutations dans une bande de 50 nucléotides.
    Je veux connaître mon nombre de mutations, rapporté à la longueur de la zone considérée, pour comparer des zones de manière indépendante de leur longueur. J'espère que c'est clair


    Sinon pour sauver les infos (catégories et valeurs) dans deux variables différentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    instabilite_loh<-table(data_loh$cytoband)[ which( table(data_loh$cytoband) > 1 ) ]
     
    valeurs_instabilite_loh<-as.numeric(instabilite_loh)
     
    categories_instabilite_loh<-row.names(instabilite_loh)
    C'est tout à fait ce qu'il me fallait, merci

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

Discussions similaires

  1. [Débutant] Extraire une partie des données d'un fichier à deux colonnes.
    Par NoobTotal dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/12/2011, 17h15
  2. Extraire une partie des caractères d'une URL ?
    Par Mister Paul dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/03/2009, 16h18
  3. Extraire une partie de table sur critère (range) numérique
    Par lbar012001 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/12/2008, 17h36
  4. Limiter les droits à une partie des lignes d'une table
    Par Nabu dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 20/08/2006, 00h04
  5. Réponses: 3
    Dernier message: 07/04/2006, 10h40

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