2016-08-09 4 views
0

I eine SpatialPointsDataFrame mit dem folgenden Code erstellt haben:eine Teilmenge eines SpatialPointsDataFrame Exportieren

SpatialPointsDataFrame(coords = xy, data = data4xy, 
         proj4string = CRS("+proj=utm +zone=9 ellps=WGS84")) 

wo data4xy ist ein Datenrahmen, die 2 Spalten ist date der Zeitstempel mit jedem GPS-Punkt zugeordnet ist, und id ist ID des verfolgten Tieres.

Von diesem SpatialPointsDataFrame möchte ich ein Shapefile mit writeOGR() für jedes verfolgte Tier (im Wesentlichen Gruppierung von id) exportieren. Wie würde ich das umsetzen?

Antwort

1

Gerade subset in einer for-Schleife oder ein * Anweisung gilt, z.B .:

library("sp") 
library("rgdal") 

data("meuse") # example data 
coordinates(meuse) <- ~x+y 
proj4string(meuse) <- CRS("+init=epsg:28992") 

# separate by `soil` 
table(meuse$soil) 
# 1 2 3 
# 97 46 12 

id_list <- levels(meuse$soil) # `levels()` for factors, otherwise `unique()` 

# subset SpatialPointsDataFrame and write shapefiles 
lapply(id_list, 
     function(x) { 
     writeOGR(obj=subset(meuse, soil==x), dsn=".", 
        layer=sprintf("meuse_%s", x), 
        driver="ESRI Shapefile") 
     }) 
+0

Danke, das ist genau das, was ich brauchte! Kannst du mir bitte erklären, warum ich 'sprintf()' brauche? Ich möchte nur den Code verstehen, um meine Programmierkenntnisse zu verbessern. – Splash1199

+0

Ich habe 'sprintf' verwendet, um die Dateinamen der Shapefiles zu erstellen, es gibt viele andere Möglichkeiten, dies zu tun ... – rcs

Verwandte Themen