Ich versuche, einen SpatialPolygonsDataFrame mit meinen Daten zusammenzuführen. Ich habe eine passende Variable, auf die ich mich einstellen möchte. Der data.frame ist longitudinal, also gibt es drei Einträge für jede ISO (d. H. Südafrika (ISO: ZAF) hat Zeilen für 2002, 2007 und 2013). Ich habe es versucht mit taRifx.geo
und sp
, aber beide werfen Fehler.Fehler beim Zusammenführen von SpatialPolygonsDataFrame mit Dataset
Hier ist der Code und der Fehler für die taRifx.geo
Versuch. Ich bin mir überhaupt nicht sicher, dass das richtig ist, weil die merge
Dokumentation für dieses Paket schrecklich ist.
elephCountries <- taRifx.geo::merge(SPDF=afCountries, df=elephMapData, by=ISO_A3)
Error in as.data.frame(x) : argument "x" is missing, with no default
Die Verwirrung mit dem obigen Fehler ist, dass nirgendwo in der merge
Dokumentation es für ein x
Argument nicht fragen. Es fragt nach SPDF
und df
. Das ist es.
Und hier ist der Code und Fehler für die sp
Versuch. Die Dokumentation hier ist besser, aber ich konnte nirgendwo eine Erklärung für den Fehler finden.
elephCountries <- sp::merge(x=afCountries, y=elephMapData, by="ISO_A3", duplicateGeoms=TRUE)
Error: nrowBefore == nrowAfter is not TRUE
Ich habe überall gesucht, was das bedeutet, und bin nicht in der Lage, es herauszufinden. Es ist mir ehrlich gesagt egal, welches Paket ich verwende, um die beiden Datensätze zusammenzuführen, ich will nur, dass es funktioniert. Jede Hilfe wäre willkommen. Vielen Dank!
EDIT: Hier sind die Dateien, die ich zusammenführen möchte.
Ich bin subsetting nur afrikanische Länder, da dies ein Projekt über die illegale Tötung von Elefanten ist. So, hier ist der Code:
countries <- readOGR("Data/geo-countries-master/data/countries.geojson", "OGRGeoJSON")
afCountries <- subset(countries, countries$ISO_A3 %in% c(
"AGO", "BDA", "BEN","BWA","BFA","CMR","CAF","TCD","COG","CIV","COD", "COM",
"DJA", "DZA", "EGY", "ERI", "ETH", "GAB", "GHA", "GIN", "GMB", "GNB", "GNQ", "KEN",
"LSO", "LBR", "LBY", "MDG", "MRT", "MUS", "MAR", "MWI", "MLI", "SDN", "SSD",
"MOZ", "NAM", "NER", "NGA", "RWA", "SEN", "SHN", "SLE", "STP", "SOM", "SWZ", "ZAF", "TZA",
"TGO", "TUN", "UGA", "ZAF", "ZMB", "ZWE"))
elephMapData <- read.xlsx("Data/elephByCountry_master.xlsx", sheetName = "Sheet1")
elephCountries <- sp::merge(afCountries, elephMapData, by.x='ISO_A3', by.y='ISO3', duplicateGeoms=TRUE)
Wie ich bereits sagte, ich habe versucht, mit Zusammenführung sowohl in der sp
Paket und dem taRifx.geo
Paket und ich bekomme den gleichen Fehler mit beiden (das heißt Error: nrowBefore == nrowAfter is not TRUE
). Ich habe den sp::merge
Code angeschaut und es sieht so aus, als ob die Anzahl der Zeilen für jede Datei übereinstimmen sollte. Es scheint jedoch, dass mit dem duplicateGeoms
Anruf, sollte das keine Rolle spielen. Hier ist, was die help
sagt darüber:
duplicateGeoms
logical; if TRUE geometries in x are duplicated if there are multiple matches between records in x and y
Was genau wollen Sie tun? Versuchen Sie, Ihren Polygonen Attributdaten hinzuzufügen? Oder versuchen Sie einfach, mehr Polygone hinzuzufügen? Die Verwendung von 'merge' mit räumlichen Daten ist wahrscheinlich keine gute Idee. Sie sollten eine Funktion aus einem tatsächlichen räumlichen Paket verwenden, wie RGEOS, Raster, SP, SPATSTAT, MAPTools. – Tbar
Können Sie Ihren Shapefile und Ihre Daten posten? Es ist einfacher, die Zusammenführung mit tatsächlichen Daten zu demonstrieren. – Phil
. @ Tbar, danke, und ja, ich versuche, Attributdaten hinzuzufügen, so dass ich die Daten und Karten mit 'leaflet' verwenden kann. Außerdem verwende ich die Merge-Funktionen in räumlichen Paketen, wie Sie aus meinem Code sehen können, d. H. "Sp :: merge (...)". Und @Phil, ich habe Links zu meinen Daten und GEOJSON-Dateien auf Github gepostet. – ldlpdx