Eu queria associar um arquivo CSV a um shapefile.
Quando identifiquei um campo para facilitar a junção, por exemplo,
map <- spChFIDs(map, as.character(map$ID))
voltou
Erro em spChFIDs (SP, x): os comprimentos diferem
Alguém pode aconselhar?
Eu queria associar um arquivo CSV a um shapefile.
Quando identifiquei um campo para facilitar a junção, por exemplo,
map <- spChFIDs(map, as.character(map$ID))
voltou
Erro em spChFIDs (SP, x): os comprimentos diferem
Alguém pode aconselhar?
Respostas:
Aqui está como você pode fazer isso em 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 @ dados, by.x, gota = false): Colunas indefinidos selecionado)
Eu não sei como fazer com R para ingressar em um shapefile com um CSV. No entanto, se isso puder ajudá-lo, você também poderá fazer isso no QGIS usando o pluggin MMQGIS.
Se você estiver trabalhando no R, seu shapefile e .csv precisam ser carregados como data.frame ou data.table. Você pode usar join () para mesclá-los.
Você tem mais informações sobre que tipo de shapefile você possui?
Tive sorte ao fazer o seguinte quando mesclo shapefiles e dados. Observe que você precisa deixar a extensão .shp no argumento "layer". Eu usei "GEOID" onde você colocaria qualquer que seja o nome da "forma" em interesse.
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")
Em seguida, você pode mesclar seus dados usando algo como
full.data = join(mydata, shapefile.df, by = "GEOID", type = "full")
Se você estiver trabalhando em R, a mesclagem não é realmente necessária. Você pode usar o ggplot para exibir seus dados em um mapa. Veja, meu exemplo. Este forro faz maravilhas com arquivo de forma bangladesh = fortify(p1, region = "ADM1_EN")
. E então você pode 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")
E o mapa que recebo está aqui.