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 :

Affichage étrange d'une data.frame


Sujet :

R

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2021
    Messages : 44
    Points : 28
    Points
    28
    Par défaut Affichage étrange d'une data.frame
    Bonjour,

    Avant tout je tiens à préciser que j'ai commencé avec R et RStudio il y a 2 jours.

    La situation: j'ai un tableau de données en csv avec 4 colonnes. L'objectif pour moi est d'utiliser R-markdown pour créer des documents avec des tableaux différents mais tous issus du même fichier.csv. En effet j'aimerais afficher une partie du tableau en fonction du contenu de la 2ème colonne. J'ai écrit alors un chunk:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ```{r}
    df <- data.frame(read.csv("data.csv")) 
    data <- df[df$Obj==1,] 
    print(data)
    knitr::kable(data[3:4])
    ```
    Ligne 3 : d'après ce que j'ai compris, je crée à partir de df, une nouveau data.frame (appelé data) qui ne contient que les lignes contenant la valeur 1 dans la colonne Obj
    Ligne 4 : pour voir le résultat
    Ligne 5 : pour sortir mon doc, dont seul les colonnes 3 et 4 doivent être visible.

    Résultat du print

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ##   X Obj Lettre Lettre2
    ## 1 1   1      a       b
    ## 2 2   1      c       d
    ## 3 3   1      a       b
    ## 4 4   1      c       d
    ## 5 5   1      a       b
    Première chose étrange, cela me rajoute une colonne X. Mais le document final produit le tableau suivant :

    Nom : tableau1.png
Affichages : 63
Taille : 2,9 Ko

    Donc tout va bien, c'est ce que je cherche à avoir.

    Là où ça devient bizarre, c'est lorsque je veux faire la même chose en changeant la condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ```{r}
    df <- data.frame(read.csv("data.csv")) 
    data <- df[df$Obj==2,] 
    print(data)
    knitr::kable(data[3:4])
    ```
    Ligne 3 : valeur 2 à la place de 1

    Résultat du print

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ##   X Obj Lettre Lettre2
    ## 6 6   2      c       d
    ## 7 7   2      a       b
    ## 8 8   2      c       d
    ## 9 9   2      a       b
    Toujours une colonne X en plus, j'ai bien les lignes dont la valeur est 2 pour Obj. Mais le document final produit le tableau suivant :

    Nom : tableau2.png
Affichages : 58
Taille : 3,2 Ko

    Et la c'est bizarre, pourquoi la colonne supplémentaire s'affiche ?

    Donc mes questions :
    1.Est-ce que mon code est correct ou il y a un moyen plus simple d'afficher des lignes en fonction de leur contenu ?
    2. Peut-on empêcher l'ajout d'une colonne X lors de la création de la data.frame "data"
    3. Pourquoi cette colonne supplémentaire s'affiche dans la situation 2 et pas dans la 1 (alors que je précise bien kable(data[3:4] ?

  2. #2
    Membre du Club
    Femme Profil pro
    Chef d'entreprise
    Inscrit en
    Juin 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chef d'entreprise

    Informations forums :
    Inscription : Juin 2020
    Messages : 27
    Points : 40
    Points
    40
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df <- data.frame(read.csv("data.csv"))
    Vous pouvez retirer la fonction data.frame(), le read.csv() vous en livre un par définition

    Vous demandez de sélectionner les lignes de df dont la valeur (des lignes) vaut df$Obj==1 pour l'assigner à data (je ne connais pas vos données mais ça ne me semble pas une bonne idée de sélectionner des lignes par des valeurs de colonnes conditionnées. Vous avez l'air de chercher un filtre ou la valeur de Obj vaut 1, utilisez plutôt df %>% filter(Obj == 1) du package dplyr)

    on print l'objet dans la console

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    knitr::kable(data[3:4])
    on "markdownise" les colonnes 3 et 4 de data (lancez l'instruction dans la console pour voir les | ) qui sont ensuite rendered en tableau dans le rmd

    Peut-être que vous vouliez utiliser le paramètre results = "asis" dans le chunk ?

    Si vous êtes en train d'explorer vos données pour la valeur 1 puis pour la valeur 2, utilisez directement le viewer (il est Excel-like) avec la commende View() à ne pas laisser dans le Rmd ou en cliquant sur l'objet dans le tab environnement.
    Si vous cherchez à faire des rapports selon les valeurs de Obj, le YAML du Rmd se paramétrise

    Bon courage !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2021
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Vous avez l'air de chercher un filtre ou la valeur de Obj vaut 1, utilisez plutôt df %>% filter(Obj == 1) du package dplyr)
    Oui, j'ai déjà essayé avec succès la fonction filter en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ```{r}
    df <- read.csv("data.csv")
    library(dplyr)
    knitr::kable(df%>% filter(Obj == 1))
    ```
    mais je ne sais pas comment ne pas afficher les deux premières colonnes


    Si vous êtes en train d'explorer vos données pour la valeur 1 puis pour la valeur 2, utilisez directement le viewer (il est Excel-like) avec la commende View() à ne pas laisser dans le Rmd ou en cliquant sur l'objet dans le tab environnement.
    Si vous cherchez à faire des rapports selon les valeurs de Obj, le YAML du Rmd se paramétrise
    Je cherche à faire un rapports selon les valeurs de Obj…je vais donc concentrer mes recherches sur le YAML

    Merci pour ces informations, cela me donne déjà quelques pistes à explorer.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2021
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    J'ai cherché un peu plus loin et j'obtiens ce que je veux avec :

    knitr::kable(df%>% filter(Obj == 2)%>%select(3:4))
    Cela filtre en fonction de la valeur de Obj puis ne selectionne que les colonnes 3 à 4.


    Est-ce que ce code semble propre ? Vous parliez de résultats identiques en paramétrant le YAML…je suis curieux de savoir comment est-ce possible (si ça l'est et que je n'ai pas mal compris). En attendant, je considère que mon pb est résolu.

  5. #5
    Membre du Club
    Femme Profil pro
    Chef d'entreprise
    Inscrit en
    Juin 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chef d'entreprise

    Informations forums :
    Inscription : Juin 2020
    Messages : 27
    Points : 40
    Points
    40
    Par défaut
    C'est une mauvaise pratique de sélectionner des colonnes par leur numéro, vous pouvez les appeler par leur nom (sans guillemets dans le tidyverse).

    Pour paramétriser le rapport, vous pouvez lire ceci : https://bookdown.org/yihui/rmarkdown...d-reports.html

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2021
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Merci pour ces dernières infos, je vais utiliser le nommage par titre…sans doute une mauvaise habitude venant de python

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Aec Dplyr, on selectionne les lignes avec la foction "slice"

    knitr::kable(df%>% filter(Obj == 2)%>%slice(3:4))

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

Discussions similaires

  1. Rajout d'une colonne dans une data frame
    Par kalapiso dans le forum R
    Réponses: 2
    Dernier message: 23/10/2011, 14h43
  2. [Lazarus] Affichage étrange dans une Form
    Par ovni76 dans le forum Lazarus
    Réponses: 0
    Dernier message: 19/03/2011, 11h18
  3. Dupliquer les lignes d'une data. frame
    Par manoir dans le forum R
    Réponses: 2
    Dernier message: 09/07/2009, 18h25
  4. Mean par colonne dans une data frame
    Par manoir dans le forum R
    Réponses: 3
    Dernier message: 19/06/2009, 11h06
  5. Trier une data frame
    Par manoir dans le forum R
    Réponses: 4
    Dernier message: 28/04/2009, 16h29

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