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 :

Combinaison d'objets pour obtenir un SpatialPolygonsDataframe


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2
    Par défaut Combinaison d'objets pour obtenir un SpatialPolygonsDataframe
    Bonjour,

    J’utilise R 2.15.0.

    J’aimerais construire un SpatialPolygonsDataframe à partir de deux objets, un spatialpolygonedataframe et un dataframe (cf NB ci-dessous), sur base d’une colonne commune IDbloc pour combiner les fichiers. Sachant que certains IDbloc de l’objet spatial ne se retrouvent pas dans le dataframe (donc pas le même nombre de lignes), et que l’ordre des IDbloc n’est pas le même dans les deux objets (les lignes correspondant aux IDblocs ne sont pas dans le même ordre dans les deux objets, donc je ne peux pas les matcher sur base de "row names").

    J’ai essayé de combiner les deux objets avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIBE_RatDam.spdf<-SpatialPolygonsDataFrame(LIBE_blockID.spdf, LIBE_RatDam.df , match.ID= LIBE_RatDam.df$IDbloc)
    Mais cela ne fonctionne pas car je n’ai pas le même nb de lignes (Erreur : length(Sr@polygons) == nrow(data) is not TRUE), et en plus pas dans le même ordre.

    Comment faire ?

    Des recherches m’ont laissée penser qu’il faudrait que j’utilise des fonctions comme match, spCbind et/ou spChFIDs, en enlevant dans l’objet spdf les lignes correspondant aux IDbloc qui ne se retrouvent pas dans l’objet df, et ensuite réorganisant les lignes dans l’objet df pour avoir le même ordre que dans l’objet spdf, mais je ne m’en sors pas, je n’arrive pas à produire un script qui fonctionne (je suis débutante avec R…).
    Et je me dis en plus qu’il y a peut-être un moyen plus rapide/élégant.

    Mille merci d’avance si quelqu’un peut m’aider...


    NB :
    - objet de classs SpatialPolygonsDataframe (nommé « LIBE_blockID.spdf ») qui matérialise sous forme de polygones les différentes blocs (=parcelles) d’une plantation/zone, avec pour @data une seule colonne « IDbloc » (le contenu de la colonne IDbloc correspond en fait à la valeur du numéro de la ligne). (Nb : cet objet est issu d’une couche .shp de QGIS)
    - objet de class dataframe (nommé « LIBE2011a_RatDam.df »), avec une colonne « IDbloc » et plusieurs autres colonnes correspondant à des observations (observations mensuelles dans ces blocs pour le mois a de l’année 2011). Je n’ai pas forcément des observations pour tous les blocs recensés dans mon objet LIBE_blockID.spdf (sur base IDbloc : 1 ligne de « LIBE_blockID.spdf » pour 0 à 1 ligne dans « LIBE2011a_RatDam.df »). L’ordre des lignes selon la variable IDbloc est différent de l’objet précédent (et ne correspond pas au numéro des lignes).

  2. #2
    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,

    pour utiliser spCBind ou pour adjoindre un data frame à un objet de type spdf, il faut pour cela que les row.names soient identiques entre l'objet spatialPolygonsDataFrame et le data frame

    Les row.names d'un objet spatial correspondent aux identifiants de chaque entité le constituant, identifiés par le slot "ID"

    spCBind permet de joindre des données data frame à un objet de type SpatialPolygonsDataFrame, soit, un objet spatial pour lequel il existe déjà des données.

    Dans votre cas, le plus simple consisterait sans doute à utiliser la fonction merge afin de joindre le data frame de l'objet spatial et celui duquel récupérer des infos:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    m <- merge(LIBE_blockID.spdf@data, LIBE_RatDam.df, by="IDbloc", all.x=TRUE)
    row.names(m) <- row.names(LIBE_blockID.spdf)
    spdf <- spCBind(LIBE_blockID.spdf, LIBE_RatDam.df)
    Je n'ai pas testé mais revenez sur le forum s'il y a un point bloquant..

  3. #3
    Nouveau candidat au Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2
    Par défaut
    Ok, merci bcp pour vos explications claries et précises. Je vais essayer votre option.

    Pour info, j'ai eu une réponse sur un autre forum, et ça marche aussi (cela complete mon objet LIBE_blockID.spdf avec les variables dans LIBE_RatDam.df) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIBE_blockID.spdf@data <- data.frame(LIBE_blockID.spdf@data,LIBE_RatDam.df[match(LIBE_blockID.spdf@data[,"IDbloc"],LIBE_RatDam.df[,"IDbloc"]),])
    Le seul pb c'est qu'après je dois changer de nom, effacer LIBE_blockID.spdf pour ne pas faire de confusion la variable d'origine, et recréer cette dernière variable au besoin (ce qui n'est pas difficle car j'ai le shp)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LIBE_RatDam.spdf<- LIBE_blockID.spdf
    rm(LIBE_blockID.spdf)
    Merci encore pour votre aide.

Discussions similaires

  1. Utilitaire pour obtenir la taille des objets Access
    Par =JBO= dans le forum Contribuez
    Réponses: 14
    Dernier message: 19/08/2023, 19h22
  2. Réponses: 3
    Dernier message: 01/09/2014, 07h03
  3. Réponses: 12
    Dernier message: 02/09/2009, 18h24
  4. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28
  5. Fonction/méthode pour obtenir l'IP de la machine
    Par sirex007 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 10/04/2003, 14h36

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