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 :

Trouver une colonne sur R


Sujet :

R

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut Trouver une colonne sur R
    Bonjour,

    J'ai un problème que je n'arrive pas à résoudre. J'ai dans ma table R des montants mis sous forme de triangle.

    J'ai sur ma ligne quelque chose comme ci-dessous, soit par exemple de Janvier 2017 à Mars 2018 :

    Jan Feb Mar ... Nov Dec Jan Feb Mar.

    Les données sont en dessous du mois auxquelles elles correspondent mais l'année n'est pas mentionnée devant les mois (Jan17 ou Jan 18 par exemple), ce serait top simple .

    Je cherche un moyen de récupérer en fonction du nombre de mois entre Janvier2017 et Mars2018, les données du mois de Mars2018.
    Mon problème est que je en vois pas comment gérer cela surtout à cause des NA.

    Ce code me permet de récupérer la durée entre deux mois et le mois correspondant. J'utilise ensuite le mois trouvé pour faire une recherche sur mon dataframe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    #Je fais la différence en nombre de mois entre mes 2 dates
    Duree <- floor(time_length(interval(DateDebut, DateFin), unit = "months")) + 1
     
    ##je récupère le nom du Mois
    MoisFin <- if(Duree > 12) { Duree - 12  }else {  Duree }
    MoisFin <- month.abb[MoisFin]
     
    #Je fais une recherche sur mon data.frame avec le nom du mois trouvé
    tab <- as.data.frame(which(data==MoisFin, arr.ind = TRUE))
    Juste que là tout va bien mais je suis bloqué parce que je ne vois pas comment indiquer exactement les données de quelle colonne je veux prendre à mon code.

    Le data.frame tab me donne ça comme réponse et j'ai besoin que des données de la colonne 29 qui correspondent au mois de Mars 2018 aujourd'hui mais l'année prochaine, les données du mois de Mars 2018 seront en colonne 9.

    Je ne vois vraiment pas comment faire cette sélection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      row col
    1   9   8
    2  29   8
    3   9  29
    4  29  29
    Et les colonnes sont parfois espacées avec des NA, je les garde parce que les enlever ne me permet pas non plus de résoudre mon problème et aussi parce qu'elles ne gênent pas le which.

    J'espère que je me suis fait comprendre.

    Merci par avance
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Trouver une colonne sur R
    Bonjour,

    J'ai du mal à comprendre votre programme : vous commencez par parler d'une ligne avec Jan Feb Mar ... Nov Dec Jan Feb Mar et ensuite il est question de DateDebut et DateFin.

    • Quelle est la structure de vos données (fonction str()) ?
    • Pouvez-vous fournir des données test sous forme d'une instruction data.frame() ou d'un fichier à importer ?


    Merci,

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par mgdondon Voir le message
    Bonjour,

    J'ai du mal à comprendre votre programme : vous commencez par parler d'une ligne avec Jan Feb Mar ... Nov Dec Jan Feb Mar et ensuite il est question de DateDebut et DateFin.
    Bonjour,

    Merci beaucoup pour votre réponse, il y a au moins quelqu'un qui s'est penché sur mon problème.

    Je vous ai mis en bas un fichier test.

    En fait, ce que j'ai fait dans mon code, c'est que je récupère dans la cellule commencant par un From les dates qui représenteront les dates de début et de fin.

    Je calcule ensuite la durée en nombre de mois à partir de ses deux dates.

    Je fais une recherche avec le numéro du mois trouvé mais sous forme de lettres (3 pour "Mar") à l'aide de Which.

    J'obtiens ensuite les positions des "Mar" trouvés dans la table.

    C'est à cette étape que je m'arrête parce que pour une période allant de Janviers 2017 à Mars 2018 par exemple, j'ai deux occurences pour ma recherche et je pourrais même en avoir 3 si on va jusqu'à 2019.
    Les colones vides créées et les colonnes contenant des NA créées par l'import de fichiers m'empêche notemment de pouvoir juste jouer sur la durée en nombre de mois.

    Je m'explique, si le fichier était bien importé, avec une durée de 15 pour exemple de Jan2017 à Mar2018, je serais directement allé à la 16ème colonne, la première contenant les libellés de ligne.

    Mais ce n'est pas le cas.

    Par ailleurs, toute modification du fichier avant l'import n'est pas possible. En effet, les utilisateurs n'auront pas la main sur les fichiers.

    • Quelle est la structure de vos données (fonction str()) ?
    • Pouvez-vous fournir des données test sous forme d'une instruction data.frame() ou d'un fichier à importer ?

    testfile.xls

    Je vous mets là un fichier test.

    Encore une fois, Merci beaucoup.
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

  4. #4
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Trouver une colonne sur R
    Bonjour,

    Merci pour votre réponse.

    Pouvez-vous indiquer votre programme depuis l'import du fichier ?

    Merci,

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par mgdondon Voir le message
    Bonjour,

    Merci pour votre réponse.

    Pouvez-vous indiquer votre programme depuis l'import du fichier ?

    Merci,
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    library("lubridate")
    library("magrittr")
    library("gdata")
    library("xlsx")
    library(stringr)
     
    setwd("H:/DATA/PACKAGE_HAYAT")
    getwd()
     
    data <- read.table("1.GSOTY17.csv", sep=";", dec=",")
     
    #je fais une recherche sur la cellule contenant le from
    for(j in 1:ncol(data))
    {
        if (isTRUE(grep(pattern="from", data[,j], value=FALSE, fixed=TRUE)!="integer(0)")){
           col1 <- j
           col2 <- FALSE
        } else if (isTRUE(grep(pattern="From", data[,j], value=FALSE, fixed=TRUE)!="integer(0)")){
           col2 <- j 
           col1<- FALSE
           }
    }
     
    #Je récupère les positions (col+lig) de la cellule contenant le from
    col <- if(is.logical(col1)) {col2} else if(is.logical(col2)){col1}
    row <- grep(pattern="From", data[,col], value=FALSE, fixed=TRUE)
     
    #Je mets le texte récupère à cette position sous forme de caractère
    str <- as.character(data[row,col])
    nchar(str)
     
    #J'extrais les dates de début et les dates de fin
    leng.D <- as.data.frame(str_locate(str, "From "))
    DateDebut <- as.Date(str_sub(str,leng.D$end + 1, 15 ), format="%d/%m/%Y")
     
    leng.F <- as.data.frame(str_locate(str, "To "))
    DateFin <- as.Date(str_sub(str,leng.F$end + 1, 29), format="%d/%m/%Y")
     
    #Je calcule la durée entre les deux dates
    Duree <- floor(time_length(interval(DateDebut, DateFin), unit = "months")) + 1
     
    #Je récupère le numéro du mois qui m'intéresse, je tiens compte de la durée pour dire que si Durée vaut 15, le mois qui m'intéresse est le mois de Mars
    MoisFin <- if(Duree > 12) { Duree - 12  }else {  Duree }
     
    #Je récupère le mois en lettres
    MoisFin <- month.abb[MoisFin]
     
    #Je récupère dans tab les occurences de ma recherche sur le mois, pour chaque occurence, which me renvoie la ligne et la colonne
    tab <- as.data.frame(which(data==MoisFin, arr.ind = TRUE))
    Je suis bloqué à cette étape. Si je ne supprime pas les colonnes contenant les NA, le mois de Mars2018 se trouve dans la colonne 29. Et je ne sais pas comment gérer ça.

    Merci encore.
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

  6. #6
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Trouver une colonne sur R
    Bonjour,

    si le fichier était bien importé, avec une durée de 15 pour exemple de Jan2017 à Mar2018, je serais directement allé à la 16ème colonne, la première contenant les libellés de ligne.
    Pour moi l'import se fait aussi bien qu'il puisse avec un fichier de ce type. J'ai juste une colonne en trop correspondant à la colonne B du fichier Excel mais tous les mois se succèdent normalement.

    Vous pouvez supprimer la deuxième colonne avec la commande suivante : data <- data[-2].

    Par ailleurs il serait peut-être plus intéressant d'importer le fichier par parties :
    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
    30
    31
    > data1 <- read.table("testfile.csv", sep=";", dec=",", skip=8, header=TRUE, nrow=14)
    > str(data1)
    'data.frame':	14 obs. of  28 variables:
     $ MON      : Factor w/ 14 levels "","Apr17","Aug17",..: 6 5 10 2 11 9 8 3 14 13 ...
     $ X        : logi  NA NA NA NA NA NA ...
     $ Jan      : int  5453 0 0 0 0 0 0 0 0 0 ...
     $ Feb      : int  543435 543 0 0 0 0 0 0 0 0 ...
     $ Mar      : int  435 435 123213 0 0 0 0 0 0 0 ...
     $ Apr      : num  345 16474 1212 6753 0 ...
     $ May      : num  8290 16474 8278 534354 6572 ...
     $ Jun      : num  8290 16474 8278 6753 6572 ...
     $ Jul      : num  8290 16474 8278 6753 6572 ...
     $ Aug      : num  8290 16474 8278 74554 6572 ...
     $ Sep      : num  8290 16474 8278 6753 6572 ...
     $ Oct      : num  8290 16474 8278 6753 6572 ...
     $ Nov      : num  8290 87 45 78 453 ...
     $ Dec      : num  8290 16474 45 453 543 ...
     $ Jan.1    : num  0 16474 8266 6815 354 ...
     $ Feb.1    : num  0 0 8334 453 6562 ...
     $ Mar.1    : num  0 0 0 6894 453 ...
     $ Apr.1    : num  0 0 0 0 6562 ...
     $ May.1    : num  0 0 0 0 0 ...
     $ Jun.1    : num  0 0 0 0 0 ...
     $ Jul.1    : num  0 0 0 0 0 ...
     $ Aug.1    : num  0 0 0 0 0 ...
     $ Sep.1    : num  0 0 0 0 0 ...
     $ Oct.1    : num  0 0 0 0 0 0 0 0 0 0 ...
     $ Nov.1    : num  0 0 0 0 0 0 0 0 0 0 ...
     $ Dec.1    : int  0 0 0 0 0 0 0 0 0 0 ...
     $ X3rd.Year: int  0 0 0 0 0 0 0 0 0 0 ...
     $ TOTAL    : num  615988 149331 190786 657365 54359 ...
    Cordialement,

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par mgdondon Voir le message
    Bonjour,

    Pour moi l'import se fait aussi bien qu'il puisse avec un fichier de ce type.
    Bonjour,

    Merci pour votre réponse.

    c'est vraiment étrange. Voici ce que j'obtiens moi. Toutefois en supprimant les colonnes contenant des NA, je pourrai gérer le problème maintenat.

    Merci

    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
     
     
    > data <- read.table("1.GSOTY17.csv", sep=";", dec=",", skip=8, header=TRUE, nrow=14)
    > str(data)
    'data.frame':	14 obs. of  42 variables:
     $ MON      : Factor w/ 14 levels "Apr17","Aug17",..: 6 4 10 1 11 9 8 2 14 13 ...
     $ X        : logi  NA NA NA NA NA NA ...
     $ Jan      : num  1837 0 0 0 0 ...
     $ Feb      : num  1837 3737 0 0 0 ...
     $ X.1      : logi  NA NA NA NA NA NA ...
     $ X.2      : logi  NA NA NA NA NA NA ...
     $ X.3      : logi  NA NA NA NA NA NA ...
     $ Mar      : num  1837 3737 2041 0 0 ...
     $ X.4      : logi  NA NA NA NA NA NA ...
     $ Apr      : num  1837 3737 2041 1613 0 ...
     $ X.5      : logi  NA NA NA NA NA NA ...
     $ X.6      : logi  NA NA NA NA NA NA ...
     $ May      : num  1837 3737 2041 1613 1681 ...
     $ X.7      : logi  NA NA NA NA NA NA ...
     $ Jun      : num  1837 3737 2041 1613 1681 ...
     $ X.8      : logi  NA NA NA NA NA NA ...
     $ Jul      : num  1837 3737 2041 1613 1681 ...
     $ Aug      : num  1837 3737 2041 1613 1681 ...
     $ X.9      : logi  NA NA NA NA NA NA ...
     $ X.10     : logi  NA NA NA NA NA NA ...
     $ X.11     : logi  NA NA NA NA NA NA ...
     $ Sep      : num  1837 3737 2041 1613 1681 ...
     $ Oct      : num  1837 3737 2041 1613 1681 ...
    Peut-être que j'avais mal modifié le fichier test.

    Cordialement
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

  8. #8
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Trouver une colonne sur R
    Bonjour,

    Vous pouvez vérifier votre export au format csv en l'ouvrant dans un éditeur de texte.

    Cordialement,

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut
    Merci beaucoup pour votre aide.

    Je me demandaiss'il était possible de récupérer les 8 premières lignes en faisant directement l'import.

    En supprimant les NA de mon fichier, j'obtiens :

    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
     
     
    > t<- 0
    >    for(j in 1:ncol(data))
    +     {
    +        if (is.na(data[,j]))
    +        {
    +             t <- cbind(t,j)
    +        }
    +     }
    There were 42 warnings (use warnings() to see them)
    > t <- t[-1]
    > data.new <- data[,-t]
     
    > warnings()
    Messages d'avis :
    1: In if (is.na(data[, j])) { ... :
      the condition has length > 1 and only the first element will be used
    2: In if (is.na(data[, j])) { ... :
      the condition has length > 1 and only the first element will be used
    La nouvelle table est bien créée mais je me demandais si les warnings représentaient un problème ou pas ?

    Cordialement,
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

  10. #10
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Trouver une colonne sur R
    Je me demandais s'il était possible de récupérer les 8 premières lignes en faisant directement l'import.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data0 <- read.table("testfile.csv", sep=";", dec=",", header=FALSE, nrow=8)
    Si l'information est systématiquement sur la 5e ligne, vous pouvez vous contenter de celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data0 <- read.table("testfile.csv", sep=",", dec=".", skip=4, header=FALSE, nrow=1)
    En supprimant les NA de mon fichier, j'obtiens
    • Je ne comprends pas votre bout de programme et il produit une table vide lorsque je l'exécute :

    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
    > data <- read.table("testfile.csv", sep=";", dec=",")
    > t<- 0
    > for(j in 1:ncol(data))
    +   {
    +   if (is.na(data[,j]))
    +   {
    +      t <- cbind(t,j)
    +   }
    +   }
    There were 28 warnings (use warnings() to see them)
    > 
    > t <- t[-1]
    > data.new <- data[,-t]
    > str(data.new)
    'data.frame':	45 obs. of  0 variables
    • Par ailleurs avez-vous vérifié votre export csv ? Je pense que c'est ma première chose à faire...

    Cordialement,

  11. #11
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut
    Le code fonctionne bien chez moi pourtant, il me permet de récupérer les colonnes dont toutes les cellules contiennent des NA dans le vecteur "t" pour me permettre de nettoyer mon data.frame.

    Citation Envoyé par mgdondon Voir le message
    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
    > data <- read.table("testfile_v2.csv", sep=";", dec=",")
    > t<- 0
    > for(j in 1:ncol(data))
    +   {
    +   if (is.na(data[,j]))
    +   {
    +      t <- cbind(t,j)
    +   }
    +   }
    There were 28 warnings (use warnings() to see them)
    > 
    > t <- t[-1]
    > data.new <- data[,-t]
    > str(data.new)
    'data.frame':	45 obs. of  0 variables
    • Par ailleurs avez-vous vérifié votre export csv ? Je pense que c'est ma première chose à faire...
    Oui, j'ai bien vérifié mon import CSV.

    Juste en faisant l'import csv, j'obtiens cela :
    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
     
     
    > data2 <- read.table("1.GSOTY17.csv", sep=";", dec=",", skip=8, header=TRUE, nrow=Duree+1)
    > str(data2)
    'data.frame':	16 obs. of  42 variables:
     $ MON      : Factor w/ 16 levels "","Apr17","Aug17",..: 7 5 11 2 13 10 9 3 16 15 ...
     $ X        : logi  NA NA NA NA NA NA ...
     $ Jan      : num  1837 0 0 0 0 ...
     $ Feb      : num  1837 3737 0 0 0 ...
     $ X.1      : logi  NA NA NA NA NA NA ...
     $ X.2      : logi  NA NA NA NA NA NA ...
     $ X.3      : logi  NA NA NA NA NA NA ...
     $ Mar      : num  1837 3737 2041 0 0 ...
     $ X.4      : logi  NA NA NA NA NA NA ...
     $ Apr      : num  1837 3737 2041 1613 0 ...
     $ X.5      : logi  NA NA NA NA NA NA ...
     $ X.6      : logi  NA NA NA NA NA NA ...
     $ May      : num  1837 3737 2041 1613 1681 ...
     $ X.7      : logi  NA NA NA NA NA NA ...
     $ Jun      : num  1837 3737 2041 1613 1681 ...
     $ X.8      : logi  NA NA NA NA NA NA ...
     $ Jul      : num  1837 3737 2041 1613 1681 ...
     $ Aug      : num  1837 3737 2041 1613 1681 ...
     $ X.9      : logi  NA NA NA NA NA NA ...
     $ X.10     : logi  NA NA NA NA NA NA ...
     $ X.11     : logi  NA NA NA NA NA NA ...
    Après utilisation de mon code, les colonnes contenant que des NA sont bien supprimées et j'obtiens :

    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
     
     
    > t<- 0
    >    for(j in 1:ncol(data2))
    +     {
    +        if (is.na(data2[,j]))
    +        {
    +             t <- cbind(t,j)
    +        }
    +     }
    There were 42 warnings (use warnings() to see them)
    > t <- t[-1]
    > data.f <- data2[,-t]
    > str(data.f)
    'data.frame':	16 obs. of  27 variables:
     $ MON      : Factor w/ 16 levels "","Apr17","Aug17",..: 7 5 11 2 13 10 9 3 16 15 ...
     $ Jan      : num  1837 0 0 0 0 ...
     $ Feb      : num  1837 3737 0 0 0 ...
     $ Mar      : num  1837 3737 2041 0 0 ...
     $ Apr      : num  1837 3737 2041 1613 0 ...
     $ May      : num  1837 3737 2041 1613 1681 ...
     $ Jun      : num  1837 3737 2041 1613 1681 ...
     $ Jul      : num  1837 3737 2041 1613 1681 ...
     $ Aug      : num  1837 3737 2041 1613 1681 ...
     $ Sep      : num  1837 3737 2041 1613 1681 ...
     $ Oct      : num  1837 3737 2041 1613 1681 ...
     $ Nov      : num  1837 3737 2041 1613 1681 ...
     $ Dec      : num  1837 3737 2041 1613 1681 ...
    Merci.
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

  12. #12
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Trouver une colonne sur R
    Le code fonctionne bien chez moi pourtant
    OK, comme vous n'aviez pas mis la ligne d'import, je n'avais pas supprimé les 8 premières lignes.

    Oui, j'ai bien vérifié mon import CSV.
    Pouvez-vous le coller au format texte ?

    Cordialement,

  13. #13
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par mgdondon Voir le message
    Pouvez-vous le coller au format texte ?
    Bien sûr

    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
     
    Intermed CO.;;;;;;;;;;;;;;;;;;STATISTICS;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Currency : US$;;;;;;;;;;;Out ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Reinsurer : HANNOVER RE;;;;;;;;;;;From 01/01/2017 To 31/03/2018   Treaty : MED2017;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    EARNED PREMIUMS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    GSOTY17: GENERAL STATISTICS OUT-PATIENT U/YEAR 2017;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    MON;;Jan;Feb;;;;Mar;;Apr;;;May;;Jun;;Jul;Aug;;;;Sep;Oct;Nov;;Dec;Jan;Feb;Mar;Apr;;May;Jun;Jul;Aug;;Sep;Oct;Nov;Dec;3rd/Year;TOTAL
    Jan17;;1836,92;1836,92;;;;1836,92;;1836,92;;;1836,92;;1836,92;;1836,92;1836,92;;;;1836,92;1836,92;1836,92;;1836,92;0,00;0,00;0,00;0,00;;0,00;0,00;0,00;0,00;;0,00;0,00;0,00;0,00;0,00;22042,98
    Feb17;;0,00;3737,07;;;;3737,07;;3737,07;;;3737,07;;3737,07;;3737,07;3737,07;;;;3737,07;3737,07;3737,07;;3737,07;3737,07;0,00;0,00;0,00;;0,00;0,00;0,00;0,00;;0,00;0,00;0,00;0,00;0,00;44844,87
    Mar17;;0,00;0,00;;;;2041,08;;2041,08;;;2041,08;;2041,08;;2041,08;2041,08;;;;2041,08;2041,08;2041,08;;2041,08;2036,40;2074,88;0,00;0,00;;0,00;0,00;0,00;0,00;;0,00;0,00;0,00;0,00;0,00;24522,05
    Apr17;;0,00;0,00;;;;0,00;;1612,96;;;1612,96;;1612,96;;1612,96;1612,96;;;;1612,96;1612,96;1612,96;;1612,96;1619,82;1645,84;1658,37;0,00;;0,00;0,00;0,00;0,00;;0,00;0,00;0,00;0,00;0,00;19440,78
    May17;;0,00;0,00;;;;0,00;;0,00;;;1681,05;;1681,05;;1681,05;1681,05;;;;1681,05;1681,05;1681,05;;1681,05;1681,05;1681,05;1681,05;1681,05;;0,00;0,00;0,00;0,00;;0,00;0,00;0,00;0,00;0,00;20172,59
    Jun17;;0,00;0,00;;;;0,00;;0,00;;;0,00;;1678,70;;1678,70;1678,70;;;;1678,70;1678,70;1678,70;;1678,70;1678,70;1678,70;1678,70;1678,70;;1678,70;0,00;0,00;0,00;;0,00;0,00;0,00;0,00;0,00;20144,37
    Jul17;;0,00;0,00;;;;0,00;;0,00;;;0,00;;0,00;;865,11;865,11;;;;865,11;865,11;865,11;;865,11;865,11;865,11;874,70;874,70;;874,70;874,70;0,00;0,00;;0,00;0,00;0,00;0,00;0,00;10419,71
    Aug17;;0,00;0,00;;;;0,00;;0,00;;;0,00;;0,00;;0,00;941,74;;;;941,74;941,74;941,74;;941,74;941,74;924,76;924,76;924,76;;924,76;924,76;924,76;0,00;;0,00;0,00;0,00;0,00;0,00;11199,03
    Sep17;;0,00;0,00;;;;0,00;;0,00;;;0,00;;0,00;;0,00;0,00;;;
    J'obtiens cela en ouvrant mon fichier csv au format texte.

    Cordialement,
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

  14. #14
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Trouver une colonne sur R
    Le problème vient bien du fichier csv. Vous ne devriez avoir qu'un point-virgule entre chaque mois alors que vous avez MON;;Jan;Feb;;;;Mar;;Apr;;;May;;Jun;;Jul;Aug;;;;Sep;Oct;Nov;;Dec;Jan;Feb;Mar;Apr;;May;Jun;Jul;Aug;;Sep;Oct;Nov;Dec;3rd/Year;TOTAL.

    Voici le même export chez moi (je ne mets que le premier tableau) :

    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
    MON;;Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec;Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec;3rd/Year;TOTAL
    janv-17;;5453;543435;435;345;8290;8290;8290;8290;8290;8290;8290;8290;0;0;0;0;0;0;0;0;0;0;0;0;0;615988
    Feb17;;0;543;435;16474,05;16474,05;16474,05;16474,05;16474,05;16474,05;16474,05;87;16474,05;16474,05;0;0;0;0;0;0;0;0;0;0;0;0;149331,45
    mars-17;;0;0;123213;1212;8278,34;8278,34;8278,34;8278,34;8278,34;8278,34;45;45;8266,31;8334,15;0;0;0;0;0;0;0;0;0;0;0;190785,5
    Apr17;;0;0;0;6752,65;534354;6752,65;6752,65;74554;6752,65;6752,65;78;453;6815,33;453;6893,97;0;0;0;0;0;0;0;0;0;0;657364,55
    May17;;0;0;0;0;6571,86;6571,86;6571,86;6571,86;6571,86;6571,86;453;543;354;6562,21;453;6562,21;0;0;0;0;0;0;0;0;0;54358,58
    Jun17;;0;0;0;0;0;8372,89;8372,89;54454;8372,89;8372,89;8372,89;345;8372,89;543;354;543;8367,53;0;0;0;0;0;0;0;0;114843,87
    Jul17;;0;0;0;0;0;0;3688,94;3688,94;3688,94;3688,94;3688,94;543;543;3688,94;543;4;3716,83;354;0;0;0;0;0;0;0;27837,47
    Aug17;;0;0;0;0;0;0;0;3923,88;57;3923,88;543;543543;3923,88;3904,52;45;3904,52;3904,52;3904,52;3904,52;0;0;0;0;0;0;575482,24
    sept-17;;0;0;0;0;0;0;0;0;6288,25;6288,25;6288,25;6288,25;6288,25;543;543543;6872,8;78;6872,8;6872,8;453;0;0;0;0;0;596676,65
    oct-17;;0;0;0;0;0;0;0;0;0;6770,06;6770,06;6770,06;8754;6770,06;543;6770,06;6750,23;354;6750,23;6942,23;6942,23;0;0;0;0;70886,22
    nov-17;;0;0;0;0;0;0;0;0;0;0;6974,7;6974,7;6974,7;7126,64;7126,64;7126,64;7126,64;54;7126,64;543;543;53;0;0;0;57750,3
    Dec17;;0;0;0;0;0;0;0;0;0;0;0;4215,91;4215,91;4215,91;4215,91;4215,91;4215,91;4215,91;4215,91;4215,91;4215,91;4215,91;4215,91;0;0;50590,92
    janv-18;;0;0;0;0;0;0;0;0;0;0;0;0;-261,77;-261,77;-261,77;-261,77;-261,77;-20,63;-20,63;-20,63;-20,63;-20,63;0;0;0;-1412
    ;;5453;543978;124083;24783,7;573968,25;54739,79;58428,73;176235,07;64773,98;75410,92;41590,84;594484,97;70720,55;41879,66;563455,75;35737,37;33897,89;15734,6;28849,47;12133,51;11680,51;4248,28;4215,91;0;0;3160483,75
    Cordialement,

  15. #15
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut
    Bonjour,

    je vous mets en pièce jointe exactement le même fichier que moi. J'ai peut-être fait des modifications importantes dans le fichier test sans m'en rendre compte.

    Est ce que vous voulez bien faire un test avec ce fichier ?

    test-tp.xls

    Merci
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

  16. #16
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Trouver une colonne sur R
    • Le nouveau fichier contient en effet des colonnes surnuméraires (janvier est en colonne C et février en colonne G).

    • Pour revenir à votre question sur les warnings :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > warnings()
    Messages d'avis :
    1: In if (is.na(data[, j])) { ... :
      the condition has length > 1 and only the first element will be used
    2: In if (is.na(data[, j])) { ... :
      the condition has length > 1 and only the first element will be used
    La nouvelle table est bien créée mais je me demandais si les warnings représentaient un problème ou pas ?
    Les warnings indiquent que seule la première observation est testée, ce qui ne pose pas de problème ici mais pourrait en poser s'il y avait de vraies données manquantes (par exemple si les cellules à 0 étaient vides).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    > t<- 0
    > for(j in 1:ncol(data2))
    +      {
    +         if (is.na(data2[,j]))
    +         {
    +              t <- cbind(t,j)
    +         }
    +      }
    There were 42 warnings (use warnings() to see them)
    > t
         t j j j j j  j  j  j  j  j  j  j  j  j  j
    [1,] 0 2 5 6 7 9 11 12 14 16 19 20 21 25 31 36
    est équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > t<- 0
    > for(j in 1:ncol(data2))
    +      {
    +         if (is.na(data2[1,j]))
    +         {
    +              t <- cbind(t,j)
    +         }
    +      }
    > t
         t j j j j j  j  j  j  j  j  j  j  j  j  j
    [1,] 0 2 5 6 7 9 11 12 14 16 19 20 21 25 31 36
    • Pour finir, il faut éviter au maximum les boucles dans R. Vous pouvez remplacer votre boucle par l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    > t <- which(is.na(data2[1,]))
    > t
     [1]  2  5  6  7  9 11 12 14 16 19 20 21 25 31 36
    Cordialement,

  17. #17
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par mgdondon Voir le message
    • Pour finir, il faut éviter au maximum les boucles dans R. Vous pouvez remplacer votre boucle par l'instruction suivante :

    [CODE]> t <- which(is.na(data2[1,]))
    Bonjour,

    Je vous remercie pour votre réponse.

    Mais je pense que vérifier seulement s'il y a des NA sur la première ligne peut-être faux. Il peut y avoir des NA plus bas sans en avoir sur la première ligne.

    C'est un peu pour cette raison que je vérifie s'il y a des NA's sur toute la colonne.

    Cordialement
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

  18. #18
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Répondre à la discussion
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > data1 <- read.table("test-tp.csv", sep=",", dec=".", skip=8, header=TRUE, nrow=16)
    > str(data1)
    'data.frame':   16 obs. of  42 variables:
     $ MON      : Factor w/ 16 levels "","Apr17","Aug17",..: 7 5 11 2 13 10 9 3 16 15 ...
     $ X        : logi  NA NA NA NA NA NA ...
     $ Jan      : num  1837 0 0 0 0 ...
     $ Feb      : num  1837 3737 0 0 0 ...
     $ X.1      : logi  NA NA NA NA NA NA ...
     $ X.2      : logi  NA NA NA NA NA NA ...
     $ X.3      : logi  NA NA NA NA NA NA ...
     $ Mar      : num  1837 3737 2041 0 0 ...
    On remarque que les colonnes valides génèrent des variables de type factor ou numeric alors que les colonnes vides génèrent des variable de type logic. On peut donc sélectionner les variables en fonction de leur type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > data1 <- data1[,sapply(data1,is.factor) | sapply(data1,is.numeric)]
    > str(data1)
    'data.frame':   16 obs. of  27 variables:
     $ MON      : Factor w/ 16 levels "","Apr17","Aug17",..: 7 5 11 2 13 10 9 3 16 15 ...
     $ Jan      : num  1837 0 0 0 0 ...
     $ Feb      : num  1837 3737 0 0 0 ...
     $ Mar      : num  1837 3737 2041 0 0 ...
    Cordialement,

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/06/2006, 15h26
  2. [StringGrid] Resize d'une colonne sur double-clique
    Par MiJack dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/03/2006, 17h35
  3. Réponses: 7
    Dernier message: 01/03/2006, 18h14
  4. [TDrawGrid]Comment afficher une colonne sur quatre ?
    Par Laurent Dardenne dans le forum Composants VCL
    Réponses: 5
    Dernier message: 11/02/2006, 16h42

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