Quería unir un archivo CSV a un shapefile.
Cuando identifiqué un campo para facilitar la unión, por ejemplo,
map <- spChFIDs(map, as.character(map$ID))
volvió
Error en spChFID (SP, x): las longitudes difieren
¿Alguien puede aconsejar?
Quería unir un archivo CSV a un shapefile.
Cuando identifiqué un campo para facilitar la unión, por ejemplo,
map <- spChFIDs(map, as.character(map$ID))
volvió
Error en spChFID (SP, x): las longitudes difieren
¿Alguien puede aconsejar?
Respuestas:
Así es como puedes hacerlo en R usando sp::merge
library(raster)
# read data
p <- shapefile("path/file.shp")
d <- read.csv("path/file.csv")
# merge on common variable, here called 'key'
m <- merge(p, d, by='key')
# perhaps save as shapefile again
shapefile(m, "path/merged.shp")
[.data.frame
(x @ data, by.x, drop = FALSE): columnas indefinidas seleccionadas)
No sé cómo hacer con R para unir un shapefile con un csv. Sin embargo, si esto puede ayudarlo, también puede hacerlo en QGIS utilizando el complemento MMQGIS.
Si está trabajando en R, su shapefile y .csv deben cargarse como data.frame o data.table. Puede usar join () para fusionarlos.
¿Tienes más información sobre qué tipo de shapefile tienes?
Tuve suerte haciendo lo siguiente cuando fusioné archivos de forma y datos. Tenga en cuenta que debe omitir la extensión .shp en el argumento "capa". Usé "GEOID" donde pondrías el nombre de la "forma" en interés.
library("rgdal")
library("data.table")
shapefile = readOGR(dsn = "DIRECTORY WITH SHAPEFILES", layer = "THE ACTUAL SHAPEFILE")
shapefile@data$id = rownames(shapefile@data)
shapefile.points = fortify(shapefile, region = "id")
shapefile.df = join(shapefile.points, shapefile@data, by = "id")
shapefile.df = subset(shapefile.df, select = c(long, lat, group, GEOID))
names(shapefile.df) = c("long", "lat", "group", "GEOID")
Entonces puedes fusionar tus datos usando algo como
full.data = join(mydata, shapefile.df, by = "GEOID", type = "full")
Si está trabajando en R, la fusión no es necesaria. Puede usar ggplot para mostrar sus datos en un mapa. Mira, mi ejemplo. Este forro hace maravillas con el archivo de forma bangladesh = fortify(p1, region = "ADM1_EN")
. Y luego puedes usar
ggplot() + geom_map(data = br2016a, aes(map_id = ADM1_EN, fill = HectareLocal),
map =bangladesh) +
expand_limits(x = bangladesh$long, y = bangladesh$lat) +
coord_fixed(.96) +
scale_fill_gradient(low="thistle2", high="darkred",
guide="colorbar", na.value="white") +
labs(title = "Bangladesh Boro Rice (Local variety), 2016", x = element_blank(), y = element_blank(),
fill='Hectares') + theme(legend.position = "bottom")
Y, el mapa que obtengo está aquí.