Suite

Exportation de l'objet "pennLC" stocké dans R sous forme de fichier de formes


J'ai besoin d'exporter lepennLCobjet depaquet:SpatialEpisous forme de fichier de formes.pennLCcontient différents composants de l'ensemble de données sur le cancer du poumon pour l'État de Pennsylvanie, tels que :

  • $geo, une trame de données
  • $données, une trame de données
  • $fumer, une trame de données
  • $spatial.polygone, Polygones spatiaux.

Le problème est,pennLCa un certain nombre de composants qui ne seront pas liés ensemble lorsque j'essaierai de les exporter sous différentes tables et fichiers de formes à l'aideécrireOGRou alorsécrireSpatialShapecommandes.

j'ai besoinpennLCobjet exporté à partir de R en tant que fichier de formes de manière à ce que ses ensembles de données/composants soient liés ensemble.


Tant que les lignes d'un bloc de données et d'un objet SpatialPolygons s'alignent, il est trivial de créer un SpatialPolygonsDataFrame et de l'exporter dans un fichier de formes. Pour lepennLCdonnées, c'est assez facile pour le$geoet$donnéescomposants, car ils ont 67 lignes, une pour chaque comté.

Vérifiez d'abord l'alignement des noms de comté :

> all(names(pennLC$spatial.polygon) == pennLC$ smoking$county) [1] TRUE > all(names(pennLC$spatial.polygon) == pennLC$geo$county) [1] TRUE

Ensuite, c'est bon de faire :

> pennLC_s = SpatialPolygonsDataFrame( pennLC$spatial.polygon, data=cbind(pennLC$geo, pennLC$ smoking), match.ID=FALSE)

et ensuite vous pouvez créer un fichier de formes avecécrireOGR(ou plus facile encore, lefichier de formesfonction de larasterpaquet).

La chose délicate est la$donnéesélément, qui a 16 lignes par comté, soit les cas et la population répartis en 4 groupes d'âge, 2 groupes ethniques et 2 groupes de sexe (4x2x2=16). Cela va nous donner 32 colonnes. Le problème est maintenant de réorganiser cette trame de données dans ce qu'on appelle un format "large".

Pour cela, nous utilisons lefondreetdcastfonctions de laremodeler2paquet

> require(reshape2) > df = dcast(melt(pennLC$data), county~age+race+gender+variable) Utilisation de county, race, gender, age comme variables d'identification > dim(df) [1] 67 33

Ce sont nos données remodelées, nous avons donc maintenant 67 lignes (une pour chaque comté) et 33 colonnes (une colonne de comté, et 16 colonnes de comptage et 16 colonnes de population).

Les noms sont construits à partir des facteurs des données d'origine :

> names(df) [1] "comté" "40.59_o_f_cases" [3] "40.59_o_f_population" "40.59_o_m_cases" [5] "40.59_o_m_population" "40.59_w_f_cases" [7] "40.59_w_f_population" "40.59_w_m_cases" ] "40.59_w_m_population" "60.69_o_f_cases"

et vous pourriez avoir des problèmes avec la limite de longueur de nom dans les fichiers de formes sous peu… continuons. Vérifiez la liste des noms :

> all(df$county==names(pennLC$spatial.polygon)) [1] VRAI

créez maintenant un SpatialPolygonsDataFrame :

> pennLC_data = SpatialPolygonsDataFrame(pennLC$spatial.polygon, df, match.ID=FALSE)

et l'écrire (à mon/tmpdossier, vous l'écrivez où vous le voulez) en utilisantraster::fichier de forme:

> require(raster) > shapefile(pennLC_data, "/tmp/penn.shp", overwrite=TRUE) Message d'avertissement : Dans writeOGR(x, filename, layer, driver = "ESRI Shapefile", overwrite_layer = overwrite, : Noms de champs abrégés pour le pilote ESRI Shapefile

Les noms ont été un peu écrasés, vous pourriez gagner à raccourcir les noms des colonnes avant de les écrire :

> ogrInfo("/tmp","penn") Source : "/tmp", couche : "penn" Pilote : ESRI Shapefile nombre de lignes 67 Type d'entité : wkbPolygone à 2 dimensions Etendue : (-80.53494 39.72316) - (-74.72516 42.26137) CRS : +proj=longlat +ellps=WGS84 +no_defs LDID : 87 Nombre de champs : 33 name type length typeName 1 conty 4 80 String 2 40_59__f_c 0 10 Entier 3 40_59__f_p 0 10 Entier 4 40_59__m_c 0 10 Entier 5 40_59__m_p 0 10 Entier 6 40_59_w_f_ 0 10 Entier 7 40_59_w__1 0 10 Entier 8 40_59_w_m_ 0 10 Entier

OU utilisez un meilleur format qu'un fichier de formes.