Der informative Teil des Fehlers besteht darin, dass die Daten, mit denen Sie arbeiten, ein S4-Klassenobjekt sind und als solches Slots enthalten. Dies bedeutet, dass Sie auf dem entsprechenden Steckplatz "@data" arbeiten müssen, der Ihren Datenrahmen enthält.
Wenn Sie "alle" Zeilen mit NA-Werten löschen möchten, können Sie einfach na.omit für den Dataframe-Slot verwenden. Dies dringt durch das sp-Objekt und entfernt zugehörige Punkte / Polygone in den anderen Slots.
shape@data <- na.omit(shape@data)
Wenn Sie Zeilen mit NAs in einer bestimmten Spalte entfernen möchten, können Sie Folgendes verwenden:
shape@data <- shape[!is.na(shape@data$col) ,]
**** Update 03/08/2016 Es gibt jetzt eine native Zusammenführungsfunktion, die sp-Objekte bearbeitet. Sie können merge genauso aufrufen, wie Sie es mit jedem anderen data.frame tun würden. Das Argument x ist jedoch ein sp-SpatailDataFrame-Klassenobjekt, und y ist ein beliebiger data.frame, den Sie zusammenführen möchten. Ich lasse die ursprüngliche Antwort zu Referenzzwecken.
Ich sollte auch darauf hinweisen, dass Sie die Zusammenführungsfunktion nicht zum Verknüpfen mit einem sp-Objekt verwenden können. Die Zusammenführungsfunktion setzt die Daten während des Vorgangs neu zusammen, wodurch die interne Beziehung im sp-Objekt unterbrochen wird. Dies ist etwas, das leider nicht weit verbreitet ist. Auf diese Weise können Sie einen Datenrahmen mit dem @ data-Slot eines sp-Objekts zusammenführen.
shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])
Wo; shape ist Ihre Formdatei, IDS ist die Kennung, mit der Sie zusammenführen möchten, und OtherData ist der Datenrahmen, den Sie mit shape kombinieren möchten. Beachten Sie, dass IDS in den beiden Datensätzen unterschiedliche Namen haben können, aber tatsächlich dieselben Werte haben müssen (nicht unscharf).
Alternativ können Sie diese Funktion nutzen.
join.sp.df <- function(x, y, xcol, ycol) {
x$sort_id <- 1:nrow(as(x, "data.frame"))
x.dat <- as(x, "data.frame")
x.dat2 <- merge(x.dat, y, by.x = xcol, by.y = ycol)
x.dat2.ord <- x.dat2[order(x.dat2$sort_id), ]
x2 <- x[x$sort_id %in% x.dat2$sort_id, ]
x2.dat <- as(x2, "data.frame")
row.names(x.dat2.ord) <- row.names(x2.dat)
x2@data <- x.dat2.ord
return(x2)
}
Wo; x = sp SpatialDataFrame-Objekt, y = DataFrame-Objekt, das mit x zusammengeführt werden soll, xcol = Spaltenname in sp-Objekt zusammenführen (muss in Anführungszeichen gesetzt werden), ycol = Spaltenname in DataFrame-Objekt zusammenführen (muss in Anführungszeichen gesetzt werden).
Aus irgendeinem Grund kann ich die @ Kelly-Frage nicht kommentieren, daher bearbeite ich meine ursprüngliche Antwort. Überprüfen Sie, welche Version von R und SP Sie ausführen? Sie können SessionInfo () ausführen, um dies herauszufinden. Das Verhalten des Entfernens zugeordneter Objekte in den anderen Datenbereichen beim Bearbeiten des @ data-Objekts war nur in den letzten sp-Versionen verfügbar. Wenn Sie keine aktuelle Version ausführen, aktualisieren Sie das Paket mit "Pakete aktualisieren" im Paketmenü. Wenn Sie> = Windows Vista ausführen, müssen Sie als Administrator ausgeführt werden. Sehen Sie sich auch die Maße vor und nach dem Objekt an, dh dim (Form), die die Anzahl der Zeilen / Spalten darstellt. Die Anzahl der Zeilen entspricht der Anzahl der Feature-Objekte. Sie können die Ergebnisse überprüfen, indem Sie überprüfen, ob die Anzahl der Zeilen im Geo-Objekt mit der Anzahl der Zeilen im @ data-Slot übereinstimmt, dh dim (shape).