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 :

réarranger un tableau/une matrice


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    465
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 465
    Par défaut réarranger un tableau/une matrice
    Bonjour,

    J'ai qqch d'assez compliqué à réaliser qui consiste à créer des fichiers Google de manière automatique mais certains traitements sont nécessaires.

    Je récupère les coordonnées de polygones depuis des couches de données spatiales:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
             [,1]     [,2]
    [1,] 9.117977 42.56610
    [2,] 9.423532 42.57824
    [3,] 9.490566 42.47105
    [4,] 9.459078 42.36303
    [5,] 9.126430 42.25
    [6,] 9.117977 42.56610
    Il faut que j'inverse l'ordre du tableau en prenant appui sur une ligne, celle dont la valeur de la deuxième colonne est la plus basse.
    which.min me récupère l'index de cette ligne mais pour le reste:

    Ainsi, je devrais avoir ce résultat à la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    9.126430298734192 42.25
    9.459078262784823 42.36303078000007
    9.490565955189886 42.4710456197469
    9.423531637215202 42.57823837594944
    9.117977272405078 42.56610448025323
    9.126430298734192 42.25333021443046
    Une idée?

    Merci!

  2. #2
    Membre chevronné
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut
    Bonjour,
    j'utiliserais order:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    d <- data.frame(c(9.117977, 9.423532, 9.490566, 9.459078, 9.126430, 9.117977), c(42.56610, 42.57824, 42.47105, 42.36303,42.25, 42.57610))
     
    o <- order(d[,2])
    cbind(d[,1][o], d[,2][o])
    Bonne journée

  3. #3
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour,

    Citation Envoyé par mathieu_r Voir le message
    Il faut que j'inverse l'ordre du tableau en prenant appui sur une ligne, celle dont la valeur de la deuxième colonne est la plus basse.
    which.min me récupère l'index de cette ligne mais pour le reste:
    Ta demande n'est pas complètement claire : si je vois bien ce qui se passe pour les lignes qui sont au dessus, que comptes-tu faire des lignes qui sont en dessous ?

    Par exemple, d'où sort la dernière ligne du résultat attendu ?

    Citation Envoyé par mathieu_r Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    							
    ...
    9.117977272405078 42.56610448025323
    9.126430298734192 42.25333021443046
    Une fois que ce sera plus clair, je devrais avoir des idées

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    465
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 465
    Par défaut
    Bonjour,

    Le tableau est un tableau des coordonnées des objets polygones d'une couche Google Earth.
    Je pensais qu'il fallait ajuster l'ordre des entrées dans le tableau sinon le polygone ne se dessinait pas.
    En fait, mon souci était seulement l'espace qu'il fallait enlever.
    Maintenant c'est résolu.

    En fait, ce que je souhaitais faire était cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
             [,1]     [,2]
    [1,] 9.117977 42.56610
    [2,] 9.423532 42.57824
    [3,] 9.490566 42.47105
    [4,] 9.459078 42.36303
    [5,] 9.126430 42.25
    [6,] 9.117977 42.56610
    repérer l'index dont la valeur de la deuxième colonne est la plus petite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
           [,1]     [,2]
    [1,] 9.117977 42.56610
    [2,] 9.423532 42.57824
    [3,] 9.490566 42.47105
    [4,] 9.459078 42.36303
    [5,] 9.126430 42.25
    [6,] 9.117977 42.56610
    Puis réarranger le tableau en suivant l'ordre indiqué à droite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
             [,1]     [,2]
    [1,] 9.117977 42.56610 5
    [2,] 9.423532 42.57824 4
    [3,] 9.490566 42.47105 3
    [4,] 9.459078 42.36303 2
    [5,] 9.126430 42.25 1
    [6,] 9.117977 42.56610 6

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    465
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 465
    Par défaut
    (mais la solution m'intéresse toujours!)

  6. #6
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Citation Envoyé par mathieu_r Voir le message
    (mais la solution m'intéresse toujours!)
    OK, mais je penses que tu as oublié le tri dans le second tableau ci-dessous...
    Du coup, je ne vois toujours pas ce que tu souhaites faire avec les lignes qui vienne après celle qui présente 42.25 !
    (restent-elles dans le même ordre ?)
    Citation Envoyé par mathieu_r Voir le message
    ...
    repérer l'index dont la valeur de la deuxième colonne est la plus petite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
           [,1]     [,2]
    [1,] 9.117977 42.56610
    [2,] 9.423532 42.57824
    [3,] 9.490566 42.47105
    [4,] 9.459078 42.36303
    [5,] 9.126430 42.25
    [6,] 9.117977 42.56610
    Puis réarranger le tableau en suivant l'ordre indiqué à droite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
             [,1]     [,2]
    [1,] 9.117977 42.56610 5
    [2,] 9.423532 42.57824 4
    [3,] 9.490566 42.47105 3
    [4,] 9.459078 42.36303 2
    [5,] 9.126430 42.25 1
    [6,] 9.117977 42.56610 6
    Edit: Je retire ce que j'ai dit, c'est moi qui ai mal lu

  7. #7
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bon, voila qui devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    d <- data.frame(a=c(9.117977, 9.423532, 9.490566, 9.459078, 9.126430, 9.117977),
                    b=c(42.56610, 42.57824, 42.47105, 42.36303,42.25, 42.57610))
     
    d[ c(seq(from=which.min(d[ , 2]), to=1),
         seq(from=which.min(d[ , 2]) + 1, to=nrow(d))), ]

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

Discussions similaires

  1. code de passage d'un tableau à une matrice
    Par yasminacha dans le forum Android
    Réponses: 0
    Dernier message: 15/03/2011, 15h14
  2. Utiliser une matrice ou un tableau ?
    Par madaou dans le forum Pascal
    Réponses: 8
    Dernier message: 19/11/2008, 21h50
  3. Conversion d'une matrice en tableau de cellules
    Par wawrint dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/06/2008, 14h55
  4. Réponses: 9
    Dernier message: 21/02/2006, 18h40
  5. chercher un tableau dans une matrice
    Par devdébuto dans le forum C
    Réponses: 12
    Dernier message: 11/12/2005, 01h26

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