Gracias. Pero la ID de la columna tiene valores únicos que se pueden usar como campo de unión. ¿Deben las entradas del campo tener la misma longitud?
user3915459
¿Podría publicar una muestra de su mapa y csv?
cengel
@cengel Es un gran conjunto de datos y una captura de pantalla no será suficiente para mostrar las variaciones. El campo "ID" en el "mapa" del archivo de forma es una cadena de números (con varios números de dígitos).
user3915459
Quizás guarde el CSV en una tabla, para que sepa que los campos de unión son del mismo tipo de datos.
klewis
Respuestas:
7
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")
Hola @RobertH, me enviaron aquí por la pregunta que publiqué ayer. Cuando me fusiono con la variable común, ¿saco esa variable del archivo de forma o del CSV? Las dos variables coinciden en contenido, pero no por nombre. He intentado jugar un poco y sigo recibiendo errores (principalmente: Error en [.data.frame(x @ data, by.x, drop = FALSE): columnas indefinidas seleccionadas)
Lauren
1
Lo averigué. Como necesitaba unir las dos capas que tenían nombres diferentes, tuve que modificar un poco el formato. Se parecía más a merge (p, d, by.x = "key", by.y = "matching.key")
Lauren
3
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.
Gracias. He intentado con ArcGIS antes, pero el conjunto de datos es enorme y prefiero hacerlo en R.
user3915459
2
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")
Respuestas:
Así es como puedes hacerlo en R usando
sp::merge
fuente
[.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.
fuente
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.
Entonces puedes fusionar tus datos usando algo como
fuente
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 usarY, el mapa que obtengo está aquí.
fuente