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 :

Manipulation de data.table


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Par défaut Manipulation de data.table
    Bonjour,

    Je souhaite filtrer une data.table, ajouter une variable et conserver toutes les variables en une seule opération.

    Si on a une data table qui contient var1 var2 var3

    DT[var1>1,var4:=var1+var2] ne supprime pas de lignes
    DT[var1>1,.(var4=var1+var2)] supprime les autres colonnes
    DT[var1>1,.(var4=var1+var2,var1,var2,var3)] fonctionne mais ça peut être long à écrire si on a des dizaines de variables

    On peut résoudre ce type de problème de pleins de façons mais je cherchais une solution de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DT[var1>1,.(var4=var1+var2,_ALL_)]
    Pour l'instant j.ai surtout réussi à enchaîner les messages d'erreurs....

    Merci pour votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Par défaut
    Pour qu'on te réponde, il est impératif que tu expliques ta syntaxe qui n'est pas celle de R.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Par défaut
    Citation Envoyé par faubry Voir le message
    Pour qu'on te réponde, il est impératif que tu expliques ta syntaxe qui n'est pas celle de R.
    Il manque en effet le début du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var1=c(1,2,3,4,5)
    var2=c(2,4,6,8,10)
    var3=c(2,2,2,2,2)
    DT=data .table(var1,var2,var3)
    DT[var1>1,.(var4=var1+var2,var1,var2,var3)]
    Le code ci-dessus fonctionne.
    Mon problème, c'est que je travaille sur des tables qui contiennent des dizaines de varibles et que cela peut-être très long de lister toutes les variables de la table dans l'instruction DT[var1>1,.(var4=var1+var2,var1,var2,var3)]

  4. #4
    Membre émérite
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Par défaut
    Que signifient ces lignes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DT[var1>1,var4:=var1+var2] ne supprime pas de lignes
    DT[var1>1,.(var4=var1+var2)] supprime les autres colonnes
    DT[var1>1,.(var4=var1+var2,var1,var2,var3)] fonctionne mais ça peut être long à écrire si on a des dizaines de variables
     
    On peut résoudre ce type de problème de pleins de façons mais je cherchais une solution de type :
    DT[var1>1,.(var4=var1+var2,_ALL_)]
    car var4:=var1+var2 n'est pas du R
    et .(var4=var1+var2) ou .(var4=var1+var2,var1,var2,var3) non plus.
    _ALL_ n'est pas non plus un mot clé de R.

    Donc, en clair que cherches-tu à faire ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Data Scientist
    Inscrit en
    Février 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist

    Informations forums :
    Inscription : Février 2017
    Messages : 28
    Par défaut
    En fait, Oliver78 a oublié de préciser qu'il fallait charger d'abord le Package "data.table" avec la commande:
    Je ne connais pas du tout ce Package mais j'avoue que la syntaxe utilisée est très étrange. Je ne pourrai pas aider ...

  6. #6
    Membre émérite
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Par défaut
    Olivier78 a oublié, comme beaucoup, les règles élémentaires qui consistent notamment
    1) à donner le maximum d'informations et notamment à citer les packages utilisés s'il ne font pas partie du cœur de R.
    2) à expliquer clairement les tenants et les aboutissants du problème notamment, indépendamment de la syntaxe non explicitée les commentaires suivants les morceaux de code ne sont pas clairs, une fois on ne veut pas enlever de ligne, une fois supprimer des colonnes...
    3) à donner du code réutilisable pour qu'on puisse le tester.
    4) à donner les messages d'erreurs suite à ce code.
    5) éventuellement, avoir consisté à consulter l'aide en ligne, et dire ce qui n'est pas clair dans cette aide ou pourquoi le code lui semble cohérent avec l'aide et donc l'erreur incompréhensible.

    Ces défauts ne sont pas spécifiques à Olivier78 mais se retrouvent dans beaucoup de demandes d'aide que ce soit pour un langage ou pour des questions plus amont comme celles touchant par exemple les statistiques. Plus la demande sera précise, plus il y a de chance d'obtenir une réponse.

    Donc, je demande à Olivier78 d'essayer de répondre aux cinq points que j'ai mentionnés ci-dessus et peut-être recevra-t-il la réponse à son problème de la part des personnes habituées à la manipulation des données au travers du package data.table.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Par défaut
    Bonjour,

    Je vais donc reformuler ma question.
    Je manipule de gros volumes de données. J’utilise la fonction data.table (du package « data.table ») pour manipuler mes données. Cela permet en une opération d’effectuer des « group by », de calculer des indicateurs et de filtrer la table.

    Le programme ci-dessous fonctionne (cf. résultat obtenu). Il permet de filtrer une table sur la variable var1 et de créer une variable var4.

    Mon problème est le suivant : je suis obligé de lister manuellement toutes les variables que je souhaite conserver : DT[var1>1,.(var4=var1+var2,var1,var2,var3)]

    Vu que mes tables contiennent plusieurs dizaines de variables différentes, je me demandais s’il n’existait pas une astuce pour indiquer à la fonction data.table que je voulais conserver toutes les variables de la table sans avoir à la les lister de façon exhaustive.

    J’ai parcouru en vain les forum ou la doc R est en ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    library("data.table")
    var1=c(1,2,3,4,5)
    var2=c(2,4,6,8,10)
    var3=c(2,2,2,2,2)
    DT=data.table(var1,var2,var3)
    DT[var1>1,.(var4=var1+var2,var1,var2,var3)]

    Résultat obtenu
    var4 var1 var2 var3
    1: 6 2 4 2
    2: 9 3 6 2
    3: 12 4 8 2
    4: 15 5 10 2

    J’espère avoir clarifié ma demande

  8. #8
    Membre émérite
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Par défaut
    Maintenant, je comprends le problème. Je connais mal le package data.table mais d'après le petit test que j'ai fait, l'astuce consiste à utiliser le second argument comme une indexation des colonnes en utilisant le fait que c'est une liste et que les data.table peuvent être aussi transformés en liste. Cela donne alors si on ne veut travailler que sur les lignes pour lesquelles var1 > 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DT[var1 > 1,c( .( var4=var1+var2), as.list( DT[var1 > 1]))]
    La fonction c permettant la concaténation des listes si les arguments sont eux mêmes des listes.
    Par contre, il faut faire attention à ce que la sélection des lignes soit la même dans les deux cas.

    Si on veut sélection des colonnes particulières du data.table initial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    as.list( DT[var1 > 1])[1,3] # permet de ne conserver que les colonnes 1 et 3 de a data.table initiale comme c'est le cas pour les data.frame
    Comme pour les data.frame, on peut remplacer le vecteur d'indices numériques par un vecteur des noms des colonnes.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Par défaut
    Merci faubry

    Effectivement, cela fonctionne

    J'essayerais d'être plus clair dans mes prochains posts

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

Discussions similaires

  1. Manipulation Data Table
    Par Rhend dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/07/2011, 11h46
  2. paginer une data table en jdevelopper
    Par mans27 dans le forum JSF
    Réponses: 3
    Dernier message: 20/04/2007, 11h05
  3. data table en jsf
    Par mans27 dans le forum JSF
    Réponses: 2
    Dernier message: 17/03/2007, 18h24
  4. manipuler un tableau <table> </table>
    Par faico dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/08/2006, 09h51
  5. Réponses: 2
    Dernier message: 09/06/2006, 22h02

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