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 :

Croiser la première colonne avec toutes les autres, une par une.


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 8
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Par défaut Croiser la première colonne avec toutes les autres, une par une.
    bonjour,

    Je galère beaucoup sur un programme que je doit réaliser.

    En gros je dois créer un programme avec le logiciel R qui me permet de croiser différentes colonnes automatiquement, c'est à dire croiser la colonne 1 avec la colonne 2, ensuite la colonne 1 avec la colonne 2, colonne 1 avec la 3, etc. avec la colonne 1 comme colonne de base. En gros, je doit croiser la colonne 1 avec toutes les autres colonnes. J'ai testé énormément de choses. j'ai vraiment pas réussi.

    Voici une des multiples syntaxes que j'ai essayées :

    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     for (i in DATAS_FLO_SBK_2[,1:289]) {
     p <- i + 1 
     Print(i)
     combn(3,2,function(x) table(DATAS_FLO_SBK_2[,x]))
     a <- table(DATAS_FLO_SBK_2[,1],DATAS_FLO_SBK_2[,i])
     return(a)
     View(a)
     }

    Si quelqu'un pouvait m'aider, please

    Cordialement M.Erkus

  2. #2
    Membre émérite

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Je comprends ta demande de faire le lien entre plusieurs colonnes. Par contre je ne comprends pas ce que tu veux indiquer comme opération par croisé. Multiplié ou sommé ou une autre opération que je vais appeler f telque pour a et b numérique alors r = f(a,b).

    Pour "croiser" deux colonnes, tu peux donc faire
    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    Resutat <- f(Data$A,Data$B)

    Avec Resultat un élément de DataFrame.

    Si tu as plusieurs colonnes, tu peux faire quelque chose comme cela

    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Resultat<-Data$A
    for(i in names(Data[,2:289])){
    Resultat<-cbind(Resultat, f(Data$A,Data[,i]))}

    Je te laisse le soin de débuger mon code faute de temps de mon côté.

    Au plaisir de te lire.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 8
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Par défaut
    D'abord, grand merci d'avoir répondu.
    Après correction il me cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error in cbind(Resultat, f(DATAS_FLO_SBK_2$K2002_1_P_19_Spannkraft_Gehause_Spannen_a19,  : 
      could not find function "f"
    Merci de ton attention.

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 8
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Par défaut
    Oui, mon but est de croiser la colonne 1 avec toutes les autres (ie. faire des croisements basiques), sauf que mon but est de faire un programme qui le fait tout seul

  5. #5
    Membre émérite

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Billets dans le blog
    2
    Par défaut
    f est le nom que j'ai défini pour la règle que tu appelles croisé. "f" peut selon tes besoins définir la fonction somme, moyenne, concaténation ou une autre de ton choix.

    Au plaisir.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 8
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Par défaut
    Citation Envoyé par dev_ggy Voir le message
    f est le nom que j'ai défini pour la règle que tu appelles croisé. "f" peut selon tes besoins définir la fonction somme, moyenne, concaténation ou une autre de ton choix.

    Au plaisir.
    Mon but est juste d'afficher les 2 colonnes pour pouvoir les manipuler après, en gros colonne 1 avec colonne 2, après colonnes 3, 4, 5, 6... Si vous pouvez me guider, please, car là je galère vraiment... Pas du tout vu ces fonctions en cours...

  7. #7
    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
    Est-ce cela que tu cherches à programmer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lapply( DATAS_FLO_SBK_2[,-1], table, DATAS_FLO_SBK_2[,1])
    ?
    En effet, ce code croise la colonne 1 avec toutes les autres colonnes et renvoie une liste dont les composantes ont comme nom le nom de la colonne croisée avec la colonne 1.

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 8
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Par défaut
    Je n'arrive pas à afficher ensuite vos données sous forme de tableau, comment puis-je faire ?

    Voici ce que moi j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Resultattest1 <- test1$K2002.1.Q_09...Balance.speed.fast
    for(x in names(test1[,2:136])){
        Resultattest1 <-  table(test1$K2002.1.Q_09...Balance.speed.fast,test1[,x])
        (print(Resultattest1))
     
    }
     
    View(Resultattest1)
    Mais le problème de cette syntaxe est qu'elle fait le croisement normalement mais une fois venue au View, il ne me présente qu'un tableau et pas tous les autres.
    Comment je peux faire, please ? (avec le view à l'intérieur de la boucle aussi ça bug).

    Merci de votre attention.

  9. #9
    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
    Le View étant en dehors de la boucle, il ne présente que la dernière valeur calculée. De toutes façon, afficher plus de 130 tableaux en même temps est une gageure que l'ordinateur risque de ne jamais relever. De plus, View ne visualise pas directement la table sous forme d'une matrice. De même afficher à la console plus de 130 tableaux en même temps n'est pas une excellente solution.

    Quelques solutions :

    res permet de conserver les résultat pour des manipulations ultérieures. C'est une liste.

    - La meilleure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    res <- lapply( DATAS_FLO_SBK_2[,-1], table, DATAS_FLO_SBK_2[,1])
    # Impression de toutes les tables
    lapply( res, print)
    # en utilisant View à la place print, visualisation de toutes les tables
    
    # impression d'une table particulière
    #    idx est le numéro ou le nom de la colonne
    print( res[[idx]])
    - Avec impression et visualisation dans la boucle (très mauvaise solution)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    res <- lapply( DATAS_FLO_SBK_2[,-1], function( x) { y <- table( x, DATAS_FLO_SBK_2[,1])
                                                                                           print( y)
                                                                                           View( y)
                                                                                           return( y) }

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 8
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Par défaut
    Merci, tu assures.

    Juste deux questions : pour manipuler les colonnes que j'ai, je fais comment : R enregistre les données automatiquement dans sa base ou je dois les enregistrer moi-même (et comment) ?
    Et pour finir : on fait comment pour exporter automatiquement les croisements en csv ?

    Merci de ton attention.

  11. #11
    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
    Qu'entends-tu par "enregistrer les données dans sa base" ? res est une variable qui existe dans l'espace de travail tant qu'elle n'est pas détruite par la fonction rm ou réécrite. Quand on sort de R, l'espace de travail est vidé sauf si on lui demande de le sauvegarder dans un fichier soit avec le nom standard, soit en lui donnant un autre nom. On peut toujours sauver à n'importe quel moment des données sous le format R par la fonction save.

    Pour sauver les tables dans un fichier csv, tu peux utiliser la procédure suivante qui met les tables les unes derrière les autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    write.table( res[[1]], file="prov.csv", sep=",")
    old.warn <- options( warn=-1)
    invisible( lapply( res[-1], write.table, file="prov.csv", sep=",", append=TRUE))
    options( old.warn)
    Tu peux aussi écrire, dans ce cas, les noms des colonnes (niveaux du facteur de la colonne 1) ne sont écrits qu'une fois au début du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    write.table( res[[1]], file="prov.csv", sep=",")
    invisible( lapply( res[-1], write.table, file="prov.csv", sep=",", append=TRUE, col.names=FALSE))
    Notes :
    1) étant donné que les noms des lignes sont enregistrés, les noms des colonne sont toujours décalés d'une colonne. read.table sait gérer cette situation mais il faut en tenir compte si tu utilises le fichier hors R.
    2) pour transformer une table de contingence en un data.frame représentatif de la matrice, il existe la fonction as.data.frame.matrix.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/12/2012, 19h21
  2. Réponses: 0
    Dernier message: 20/04/2011, 15h25
  3. Réponses: 5
    Dernier message: 25/08/2009, 15h37
  4. Réponses: 1
    Dernier message: 16/02/2005, 12h04
  5. Réponses: 2
    Dernier message: 09/07/2003, 14h10

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