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 :

Transformer un tableau sous R


Sujet :

R

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Transformer un tableau sous R
    Bonjour à tous,

    J'ai un tableau de 9216 lignes et 5 colonnes, je voudrais le transformer en tableau de 96 lignes et 480 colonnes.
    J'ai en fait 96 séries de 96 lignes avec 5 colonnes que je voudrais mettre en colonnes.

    Voici ce que j'ai fait mais ma boucle ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    newtab <- NULL
    for (i in 1:(nrow(Data1))/96)
    {
    ## Récupère  un bloc de 96 lignes et le stocke dans "TRANS"
    TRANS <- Data1[(((i-1)*96)+1):(i*96),1:5]
    newtab <- cbind(newtab,TRANS)
    }

    Avez-vous une idée à me suggérer? Merci.

    Cath

  2. #2
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 94
    Points : 147
    Points
    147
    Par défaut
    Citation Envoyé par CathyMB Voir le message
    Bonjour à tous,

    J'ai un tableau de 9216 lignes et 5 colonnes, je voudrais le transformer en tableau de 96 lignes et 480 colonnes.
    J'ai en fait 96 séries de 96 lignes avec 5 colonnes que je voudrais mettre en colonnes.

    Voici ce que j'ai fait mais ma boucle ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    newtab <- NULL
    for (i in 1:(nrow(Data1))/96)
    {
    ## Récupère  un bloc de 96 lignes et le stocke dans "TRANS"
    TRANS <- Data1[(((i-1)*96)+1):(i*96),1:5]
    newtab <- cbind(newtab,TRANS)
    }

    Avez-vous une idée à me suggérer? Merci.

    Cath
    Mais bien sûr, voila une réponse toute simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tab = matrix(rnorm(9216*5),9216,5)
    newtab = vector()
    for(i in 1:nrow(tab)){
    	if((i %% 96)==0){
    		newtab = cbind(newtab,tab[((i-96)+1):i,1:5])
    	}
    }
    N'oublie pas de remplacer tab par ton tableau

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour à tous, étant novice sur ce forum, j'ai répondu en message privé et non sur le forum.
    Voici donc ma correspondance avec "tomaprice" merci à lui des infos.

    Citation Envoyé par tomaprice
    Citation Envoyé par CathyMB
    Merci du code ;
    j'ai bien un tableau de 96 lignes et 480 colonnes , le hic c'est que je veux coller ce qu'il y a dans mes colonnes et pour le moment je n'ai que des chiffres.


    De plus, je ne comprends pas ce que signifie dans la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(i in 1:nrow(tab)){
    	if((i %% 96)==0){
    		newtab = cbind(newtab,tab[((i-96)+1):i,1:5])
    donc est ce que tu pourrais m'expliquer (i %% 96)


    merci de ton aide.
    J'imagine que ton tableau est un dataframe et les colonnes sont des facteurs. Pour convertir tes colonnes en numeric tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    data[,1] = as.numeric(as.character(data[,1]))
    data[,2] = as.numeric(as.character(data[,1]))
    ....
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = apply(data,2,function(x){ as.numeric(as.character(x)) })
    l'opérateur %% correspond à l'opération modulo, c'est le reste de la division euclidienne de i par 96. A chaque fois que le reste vaut 0 la condition est vrai ce qui est vérifié pour i = 96, i = 96*2, i=96*3, ...

    Ps : tu peux répondre sur le fil du sujet, tu n'es pas obligé de passer par message privé
    Je me mets au boulot et vous informe de la suite de mes aventures!!

    Merci encore

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Me revoila avec mes tonnes de questions,
    j'ai bien un dataframe, et je peux le convertir en numeric. Mais mon but est de copier mes colonnes et de les garder en caractères car mes premières colonnes sont des caractères.
    Pour déplacer des colonnes, quel type (character, numeric ou autre.....) de format faut-il pour pouvoir concerver ce que j'ai dans le vecteur?

    je ne sais pas si j'ai été très clair en fait.

    merci pour les réponses

    Cathy

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    J'ajoute une autre question ,

    est ce que mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newtab = cbind(newtab,tab[((i-96)+1):i,1:3]
    est correcte pour prendre 96 lignes par 96 pour les 3 colonnes. Quand je le fais je ne colle pas mes colonnes j'ai des chiffres donc j'ai surement un problème.

    Merci de vos suggestions .

    Cathy

  6. #6
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 74
    Points : 164
    Points
    164
    Par défaut
    A mon avis il faut revoir le problème et éviter d'utiliser les boucles qui sont en général (pas tout le temps) inefficientes dans R.
    Un exemple et un code valent mieux qu'une longue explication.
    Dans mon exemple j'ai 2 colonnes (toi tu en as 5) et 15 observations (toi tu en as 9216) qui représentent 3 séries de 5 observations consécutives (chez toi c'est 96 séries de taille 96).
    Donc si tu comprends cet exemple tu pourras juste l'adapter à ton cas.
    On crée d'abord notre base de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set.seed(1)
    toydat <- data.frame(x = rnorm(n = 15), y = rnorm(n = 15))
    Une étape clé est de créer un identifiant pour chaque série :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ## chez toi : base$id <- rep(1:96, each = 96)
    toydat$id <- rep(1:3, each = 5)
    Il faut maintenant garder le nom de tes variables (chez moi "x", "y")) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ## chez toi faut mettre variable <- c("var1", "var2", ..., "var5") 
    ## remplace var1, ..., var5 par le nom de tes variables
    variable <- c("x", "y")
    Result <- do.call("cbind", lapply(split(toydat, toydat$id), "[", variable))
    str(Result)
    'data.frame':	5 obs. of  6 variables:
     $ 1.x: num  -0.626 0.184 -0.836 1.595 0.33
     $ 1.y: num  -0.0449 -0.0162 0.9438 0.8212 0.5939
     $ 2.x: num  -0.82 0.487 0.738 0.576 -0.305
     $ 2.y: num  0.919 0.7821 0.0746 -1.9894 0.6198
     $ 3.x: num  1.512 0.39 -0.621 -2.215 1.125
     $ 3.y: num  -0.0561 -0.1558 -1.4708 -0.4782 0.4179
    En général il y a toujours moyen d'éviter les boucles...en espérant que ça aide.

Discussions similaires

  1. Insérer un tableau sous Word depuis Delphi
    Par muquet dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 11h59
  2. Problème Tableau Sous DW
    Par Lorik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 04/10/2005, 11h55
  3. Probleme de hauteur de tableau sous netscape
    Par teshub dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 26/08/2005, 16h00
  4. [XHTML 1.0] Transformer mon tableau en div
    Par stailer dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/05/2005, 18h50
  5. [Collections] Transformer un tableau de données en une chaîne
    Par NATHW dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 03/06/2004, 16h44

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