Die heruntergeladenen Daten enthalten einige offensichtliche Positionsfehler. Als Erstes beschränken Sie die Koordinaten auf sinnvolle Werte:
data.df <- read.csv("f:/temp/All_Africa_1997-2011.csv", header=TRUE, sep=",",row.names=NULL)
data.df <- subset(data.df, subset=(LONGITUDE >= -180 & LATITUDE >= -90))
Das Berechnen von Gitterzellenkoordinaten und -identifikatoren ist lediglich eine Frage des Abschneidens der Dezimalstellen von den Breiten- und Längengradenwerten. (Bei beliebigen Rastern zentrieren und skalieren Sie diese zunächst auf die Einheitsgröße, kürzen die Dezimalstellen und skalieren und zentrieren sie dann wieder in ihre ursprüngliche Position zurück, wie im Code ji
unten gezeigt.) Wir können diese Koordinaten zu eindeutigen Bezeichnern kombinieren. Hängen Sie sie an den Eingabedatenrahmen an, und schreiben Sie den erweiterten Datenrahmen als CSV-Datei. Es wird einen Datensatz pro Punkt geben:
ji <- function(xy, origin=c(0,0), cellsize=c(1,1)) {
t(apply(xy, 1, function(z) cellsize/2+origin+cellsize*(floor((z - origin)/cellsize))))
}
JI <- ji(cbind(data.df$LONGITUDE, data.df$LATITUDE))
data.df$X <- JI[, 1]
data.df$Y <- JI[, 2]
data.df$Cell <- paste(data.df$X, data.df$Y)
Möglicherweise möchten Sie stattdessen eine Ausgabe, die Ereignisse in jeder Rasterzelle zusammenfasst. Um dies zu veranschaulichen, berechnen wir die Anzahl pro Zelle und geben diese aus, einen Datensatz pro Zelle:
counts <- by(data.df, data.df$Cell, function(d) c(d$X[1], d$Y[1], nrow(d)))
counts.m <- matrix(unlist(counts), nrow=3)
rownames(counts.m) <- c("X", "Y", "Count")
write.csv(as.data.frame(t(counts.m)), "f:/temp/grid.csv")
Ändern Sie für andere Zusammenfassungen das function
Argument in der Berechnung von counts
. (Verwenden Sie alternativ eine Tabellenkalkulations- oder Datenbanksoftware, um die erste Ausgabedatei nach Zellenkennung zusammenzufassen.)
Lassen Sie uns zur Kontrolle die Zählungen mithilfe der Rastermitten zuordnen , um die Kartensymbole zu lokalisieren. (Die Punkte im Mittelmeer, in Europa und im Atlantik haben verdächtige Standorte: Ich vermute, dass viele davon auf eine Vermischung von Breiten- und Längengraden bei der Dateneingabe zurückzuführen sind.)
count.max <- max(counts.m["Count",])
colors = sapply(counts.m["Count",], function(n) hsv(sqrt(n/count.max), .7, .7, .5))
plot(counts.m["X",] + 1/2, counts.m["Y",] + 1/2, cex=sqrt(counts.m["Count",]/100),
pch = 19, col=colors,
xlab="Longitude of cell center", ylab="Latitude of cell center",
main="Event counts within one-degree grid cells")
Dieser Workflow ist jetzt
Gründlich dokumentiert (durch den R
Code selbst),
Reproduzierbar (durch erneutes Ausführen dieses Codes),
Erweiterbar (durch offensichtliche Änderung des Codes) und
Ziemlich schnell (die gesamte Operation dauert weniger als 10 Sekunden, um diese 53052 Beobachtungen zu verarbeiten).