নিম্নলিখিত সমাধানটি আর-সিগ-জিওতে রজার বিভান্ডের একটি পোস্টের ভিত্তিতে তৈরি । আমি ওরেগন থেকে কিছু আদমশুমারি ডেটার সাথে জার্মান শেফফিলের প্রতিস্থাপনের উদাহরণটি গ্রহণ করেছি যা আপনি এখান থেকে ডাউনলোড করতে পারেন ('ওরেগন কাউন্টি এবং আদমশুমারির তথ্য থেকে সমস্ত শেপফাইল উপাদান গ্রহণ করুন)'।
আসুন শুরু করা যাক প্রয়োজনীয় প্যাকেজগুলি লোড করা এবং শেফফাইলটি আর তে আমদানি করে with
# Required packages
libs <- c("rgdal", "maptools", "gridExtra")
lapply(libs, require, character.only = TRUE)
# Import Oregon census data
oregon <- readOGR(dsn = "path/to/data", layer = "orcounty")
oregon.coords <- coordinates(oregon)
এর পরে, ডেটা একত্রিত করার জন্য আপনার কিছু গ্রুপিং ভেরিয়েবলের প্রয়োজন। আমাদের উদাহরণে, গ্রুপিং কেবলমাত্র একক কাউন্টি স্থানাঙ্কের উপর ভিত্তি করে। নীচের চিত্রটি দেখুন, কালো সীমান্তগুলি মূল বহুভুজকে নির্দেশ করে, যেখানে লাল সীমানাগুলি বহুভুজগুলি দ্বারা উপস্থাপিত হয় oregon.id
।
# Generate IDs for grouping
oregon.id <- cut(oregon.coords[,1], quantile(oregon.coords[,1]), include.lowest=TRUE)
# Merge polygons by ID
oregon.union <- unionSpatialPolygons(oregon, oregon.id)
# Plotting
plot(oregon)
plot(oregon.union, add = TRUE, border = "red", lwd = 2)
এ পর্যন্ত সব ঠিকই. তবে, আসল শেফফিলের সাবগিগিনগুলির সাথে সম্পর্কিত ডেটা অ্যাট্রিবিউটগুলি (যেমন জনসংখ্যার ঘনত্ব, এলাকা ইত্যাদি) সম্পাদন করার সময় হারিয়ে যায় unionSpatialPolygons
। আমি অনুমান করি যে আপনি নিজের আদমশুমারী তথ্যটি শেফফিলের সাথেও যুক্ত করতে চান, সুতরাং আপনার মধ্যবর্তী পদক্ষেপের প্রয়োজন হবে।
সমষ্টি সম্পাদনের জন্য আপনাকে প্রথমে আপনার বহুভুজগুলিকে ডেটাফ্রেমে রূপান্তর করতে হবে। এখন আসুন ডেটা অ্যাট্রিবিউট কলামগুলি ছয় থেকে আট ("AREA", "POP1990", "POP1997") নেবে এবং ফাংশন প্রয়োগকারী উপরের আইডি অনুসারে সেগুলিকে একত্রিত করি sum
।
# Convert SpatialPolygons to data frame
oregon.df <- as(oregon, "data.frame")
# Aggregate and sum desired data attributes by ID list
oregon.df.agg <- aggregate(oregon.df[, 6:8], list(oregon.id), sum)
row.names(oregon.df.agg) <- as.character(oregon.df.agg$Group.1)
অবশেষে, আপনার ডেটাফ্রেমটিকে SpatialPolygonsDataFrame
পূর্বের একীভূত শেফফিল সরবরাহ করতে পুনরায় রূপান্তর করুন oregon.union
এবং আপনি উভয় সাধারণীকরণ বহুভুজ এবং উপরের সংক্ষিপ্তকরণের সমষ্টি পদক্ষেপ থেকে প্রাপ্ত আপনার আদমশুমারি ডেটা পাবেন।
# Reconvert data frame to SpatialPolygons
oregon.shp.agg <- SpatialPolygonsDataFrame(oregon.union, oregon.df.agg)
# Plotting
grid.arrange(spplot(oregon, "AREA", main = "Oregon: original county area"),
spplot(oregon.shp.agg, "AREA", main = "Oregon: aggregated county area"), ncol = 1)