Tôi muốn tham gia một tệp CSV vào một shapefile.
Khi tôi xác định một lĩnh vực để tạo điều kiện tham gia, ví dụ:
map <- spChFIDs(map, as.character(map$ID))
nó trở lại
Lỗi trong spChFID (SP, x): độ dài khác nhau
Ai có thể tư vấn?
Tôi muốn tham gia một tệp CSV vào một shapefile.
Khi tôi xác định một lĩnh vực để tạo điều kiện tham gia, ví dụ:
map <- spChFIDs(map, as.character(map$ID))
nó trở lại
Lỗi trong spChFID (SP, x): độ dài khác nhau
Ai có thể tư vấn?
Câu trả lời:
Đây là cách bạn có thể làm điều đó trong R bằng cách sử dụng 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): các cột không xác định được chọn)
Tôi không biết làm thế nào với R để tham gia một shapefile với một csv. Tuy nhiên, nếu điều này có thể giúp bạn, bạn cũng có thể thực hiện việc này trên QGIS bằng cách sử dụng MMQGIS bổ trợ.
Nếu bạn đang làm việc trong R thì shapefile và .csv của bạn cần được tải dưới dạng data.frame hoặc data.table. Bạn có thể sử dụng phép nối () để hợp nhất chúng.
Bạn có thêm thông tin nào về loại shapefile bạn có không?
Tôi đã may mắn làm được những điều sau đây khi tôi hợp nhất dữ liệu và dữ liệu. Lưu ý rằng bạn cần bỏ phần mở rộng .shp trong đối số "lớp". Tôi đã sử dụng "GEOID" trong đó bạn đặt bất kỳ tên nào của "hình dạng" mà bạn quan tâm.
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")
Sau đó, bạn có thể hợp nhất dữ liệu của mình bằng cách sử dụng một cái gì đó như
full.data = join(mydata, shapefile.df, by = "GEOID", type = "full")
Nếu bạn đang làm việc trong R thì thực sự không cần phải hợp nhất. Bạn có thể sử dụng ggplot để hiển thị dữ liệu của mình trên bản đồ. Xem, ví dụ của tôi. Điều này một lót làm việc kỳ diệu với tập tin hình dạng bangladesh = fortify(p1, region = "ADM1_EN")
. Và, sau đó bạn có thể sử dụng
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")
Và, bản đồ tôi nhận được là ở đây.