Zastanawiam się, jak połączyć wielokąty przestrzenne za pomocą kodu R?
Pracuję z danymi spisu, w których niektóre obszary zmieniają się w czasie i chcę dołączyć do wielokątów i odpowiednich danych, a po prostu raportować o połączonych obszarach. Utrzymuję listę wielokątów, które zmieniły spis na spis i które planuję scalić. Chciałbym wykorzystać tę listę nazw obszarów jako listę odnośników do danych spisu ludności z różnych lat.
Zastanawiam się, jakiej funkcji R użyć do scalenia wybranych wielokątów i odpowiednich danych. Poszukałem go, ale po prostu jestem zdezorientowany wynikami.
polygon
r
spatial-statistics
attribute-joins
census
Geoconfused
źródło
źródło
R
„smerge
funkcji.Odpowiedzi:
Poniższe rozwiązanie jest oparte na poście Rogera Bivanda na temat R-sig-Geo . Wziąłem jego przykład, zastępując niemiecki plik kształtów niektórymi danymi spisu ludności z Oregonu, które można pobrać stąd (weź wszystkie składniki pliku kształtu z „hrabstw i danych spisu stanu Oregon”).
Zacznijmy od załadowania wymaganych pakietów i importowania pliku shapefile do R.
Następnie potrzebujesz jakiejś zmiennej grupującej, aby agregować dane. W naszym przykładzie grupowanie opiera się po prostu na współrzędnych jednego hrabstwa. Zobacz obrazek poniżej, czarne obramowania wskazują oryginalne wielokąty, podczas gdy czerwone obramowania reprezentują wielokąty agregowane przez
oregon.id
.Jak na razie dobrze. Jednak atrybuty danych związane z podregionami pierwotnego pliku kształtu (np. Gęstość zaludnienia, obszar itp.) Gubią się podczas wykonywania
unionSpatialPolygons
. Wydaje mi się, że chciałbyś również zagregować swoje dane spisowe związane z plikiem kształtu, więc potrzebujesz pośredniego kroku.Najpierw musisz przekonwertować wielokąty na ramkę danych, aby przeprowadzić agregację. Teraz weźmy kolumny atrybutów danych od szóstego do ósmego („OBSZAR”, „POP1990”, „POP1997”) i agregujemy je zgodnie z powyższymi funkcjami stosującymi identyfikatory
sum
.Na koniec przekonwertuj ramkę danych z powrotem na
SpatialPolygonsDataFrame
zapewniający poprzednio ujednolicony plik kształtu,oregon.union
a otrzymasz zarówno uogólnione wielokąty, jak i dane ze spisu pochodzące z powyższego kroku agregacji podsumowania.źródło
Oto rozwiązanie wykorzystujące pakiet sf:
źródło
summarise()
pochodnych zdo_union
argumentem, ponieważ właśnie zrobiłem coś takiegosummarise_if(shapefile, predic.function, sum, na.rm = TRUE, do_union = TRUE)
, co zakończyło się sumowaniem PRAWDA w każdej komórce (tj. +1 dla wszystkich operacji). Potrzebujesz dowiedzieć się więcej, aby dowiedzieć się, czy należy to zgłosić (przynajmniej w celu uzyskania dodatkowego ostrzeżenia) ...?