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 :

Somme du nombre d'occurrences R tableau


Sujet :

R

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut Somme du nombre d'occurrences R tableau
    Hello

    Comment sommer le nombre d’occurrences à chaque position dans le fragment ?
    En abscisse il y a les lettres possibles.
    En ordonnée il y a les position (position 1, position 2, ... ,position 8).
    Dans le tableau on a donc l’occurrence de chaque lettre aux 8 positions.

    Pour le fragment 1 j'aurai : TATLQAKA : 5+2+3+4+2+1+1+4 = 22
    (T a été retrouvé 5 fois en position 1 + A qui a été retrouvé 2 fois en position 2 + T qui a été retrouvé 3 fois en position 3.....)

    QCLKMLET 3+2+5+3+1+7+3+3 = 27

    Comment le faire en R plutôt qu'à la main

    Merci beaucoup si vous avez une idée !

    Nom : Screenshot from 2019-05-03 16-44-41.png
Affichages : 1773
Taille : 14,1 Ko

    Nom : Screenshot from 2019-05-03 17-02-43.png
Affichages : 1756
Taille : 16,6 Ko

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 476
    Points : 831
    Points
    831
    Par défaut
    bonjour une solution avec le tidyverse

    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
     
    library(tidyverse) 
    ## data , colonnes A,B,C...
    ## data2 une colonne segment
     
    #creation d'une fonction qui compte les occurrences
    # les fonctions map prennent en général 2 arguments le premier une liste ou vecteur qui sera parcouru et appliqué au 2ieme argument (fonction ou formule)
    ## c'est l'équivalent d'une boucle for, la fonction renverra une liste ou un dataframe
    ## dans l'exemple ci-dessous  la fonction map_int va renvoyer un vecteur d'entiers les valeurs que vous recherchez
     
    compter <- function(segment,table_score ){
       map_int(1:8,   ## premier argument de la fonction map_int, on parcours le vecteur 1:8 (les 8 lettres des segments) que l'on applique au 2 ieme argument
    ~table_score %>% ## 2 ieme argument, la table qui contient valeurs des occurences
    select(str_sub(segment,.x,.x)) %>%  ## on selectionne la colonne qui correspond au caractere courant du segment 
    slice(.x) %>%  # on selectionne le numéro de ligne qui correspond a la position du caractere courant  dans le segement
    pull()) %>% # on extrait  la valeur recherchée
     reduce(sum) # on somme on applique la fonction sum à la liste d'entier calculée
     } 
     
    ##génération d'un dataframe  de 2 colonne ,segment et nb = valeur recherchée
    ## map_df génère un dataframe(ou tibble)
     resultat <- map_df(data2$segments,~tibble(segments=.,nb=compter(.,table_score =data)))

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    Bonjour !

    Merci beaucoup pour de votre réponses !
    Il y a t-il des étapes particulières pour installer le (tidyverse) car install.packages("tidyverse") puis library(tidyverse) me retourne le message suivant :
    Error in library(tidyverse) : there is no package called ‘tidyverse’

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    Quant je tape >resultat, Je reçois la réponse : # A tibble: 0 x 0

    Est ce normal ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 476
    Points : 831
    Points
    831
    Par défaut
    essaye compter('TATLQAKA', data) data étant ton fichier avec valeur des occurrences

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut Error
    Bonjour,

    voyez vous une erreur ?

    Je n'ai pas pu télécharger le tidyverse, car il me semble que certains packs sont prérequis.
    Images attachées Images attachées    

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 476
    Points : 831
    Points
    831
    Par défaut
    bonjour ,
    déjà je vois une erreur; ton fichier data2 a un nom de colonne = "segment"
    dans mon script la derniere ligne on data2$segments (avec un s) , change le par data2$segment
    si cela ne fonctionne pas peux tu joindre tes 2 fichiers que je teste
    pour installer le package tu peux faire : install.packages("tidyverse",dependencies = TRUE)
    as tu testercompter('TATLQAKA', data) ?

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    Voici les deux fichiers

    seg.txt et tab_sco.txt

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    Voici plus ou moins le fichier de sortie, ici je l'ai fait à la main, s'il n'y a pas les calcules détaillés ce n'est pas grave
    Images attachées Images attachées  

  10. #10
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 476
    Points : 831
    Points
    831
    Par défaut
    j'ai testé avec vos fichiers de départ et le résultat est bon
    j'ai simplement supprimé : #entête , dans le fichier seg.txt

    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
     
     
     
    library(tidyverse) 
    ## setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
    ## data , colonnes A,B,C...
    ## data2 une colonne segment
    ##je considère que les 2 fichiers sont dans le dossier courant ( donné  par getwd())
    data <- read.table("tab_sco.txt", header = T)
    data2 <- read.table("seg.txt",header = T )
    #creation d'une fonction qui compte les occurrences
    # les fonctions map prennent en général 2 arguments le premier une liste ou vecteur qui sera parcouru et appliqué au 2ieme argument (fonction ou formule)
    ## c'est l'équivalent d'une boucle for, la fonction renverra une liste ou un dataframe
    ## dans l'exemple ci-dessous  la fonction map_int va renvoyer un vecteur d'entiers les valeurs que vous recherchez
     
    compter <- function(segment,table_score ){
      map_int(1:8,   ## premier argument de la fonction map_int, on parcours le vecteur 1:8 (les 8 lettres des segments) que l'on applique au 2 ieme argument
              ~table_score %>% ## 2 ieme argument, la table qui contient valeurs des occurences
                select(str_sub(segment,.x,.x)) %>%  ## on selectionne la colonne qui correspond au caractere courant du segment 
                slice(.x) %>%  # on selectionne le numéro de ligne qui correspond a la position du caractere courant  dans le segement
                pull()) %>% # on extrait  la valeur recherchée
        reduce(sum) # on somme on applique la fonction sum à la liste d'entier calculée
    } 
     
    ##génération d'un dataframe  de 2 colonne ,segment et nb = valeur recherchée
    ## map_df génère un dataframe(ou tibble)
    resultat <- map_df(data2$segment,~tibble(segments=.,nb=compter(.,table_score =data)))

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut tidyverse
    Je suis encore désolé mais l'installation du pack tidyverse me renvois à des messages d'erreurs.
    Images attachées Images attachées  

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    Voici ce que j'obtiens après quelques retouches !! Merci beaucoup !!

    Cependant je suis bloquée sur la seule visualisation des 10 premières lignes.
    Images attachées Images attachées   

  13. #13
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 476
    Points : 831
    Points
    831
    Par défaut
    pour visualiser l' ensemble du tibble resultat tu peux faire print(resultat,n = 32) ##nrow(resultat) + 1
    si tu travailles avec Rstudio View(resultat)
    la fonction str_sub appartient au package stringr (qui logiquement est dans le tidyverse comme purrr)

  14. #14
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 476
    Points : 831
    Points
    831
    Par défaut
    en cherchant sur le net on trouve des problèmes d'installation du tidyverse, tu peux les contourner comme tu as fait en installant et chargeant les packages séparément
    pour mémoire le tidyverse contient:
    ggplot2 (visualisation)
    dplyr (manipulation des données)
    tidyr (remise en forme des données)
    purrr (programmation)
    readr (importation de données)
    tibble (tableaux de données)
    forcats (variables qualitatives)
    stringr (chaînes de caractères)

    bonne continuation

  15. #15
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    D'accord tous est ok maintenant, merci beaucoup !

    Bonne continuation de même !

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

Discussions similaires

  1. [XL-MAC 2011] Compter le nombre d'occurrence sur un tableau dynamique (URGENT)
    Par Rab606 dans le forum Excel
    Réponses: 2
    Dernier message: 21/10/2015, 16h07
  2. Réponses: 1
    Dernier message: 19/01/2014, 19h35
  3. [AC-2010] Calculer le nombre d'occurrences des extrêmes dans un tableau
    Par PinkLady dans le forum VBA Access
    Réponses: 12
    Dernier message: 17/12/2013, 09h48
  4. [débutant] Compter le nombre d'occurrence d'un texte
    Par PoichOU dans le forum Langage
    Réponses: 2
    Dernier message: 14/10/2006, 00h00
  5. Somme de nombres limitée
    Par DC dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 29/11/2005, 13h54

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