Слияние всегда будет ломать объект sp.Вот два способа объединить фрейм данных с фреймом sp @data.
shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])
Где;shape - это ваш файл формы, IDS - это идентификатор, который вы хотите объединить, а OtherData - это кадр данных, который вы хотите объединить с формой.Обратите внимание, что IDS могут быть разными именами в двух наборах данных, но на самом деле они должны быть одинаковыми (не нечёткими).
В качестве альтернативы вы можете использовать эту функцию.
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)
}
Где;x = sp SpatialDataFrame object, y = объект dataframe для слияния с x, xcol = объединить имя столбца в объекте sp (нужно заключить в кавычки), ycol = объединить имя столбца в объекте dataframe (нужно заключить в кавычки)