আমার একটি মান রাস্টার আছে:
m <- matrix(c(2,4,5,5,2,8,7,3,1,6,
5,7,5,7,1,6,7,2,6,3,
4,7,3,4,5,3,7,9,3,8,
9,3,6,8,3,4,7,3,7,8,
3,3,7,7,5,3,2,8,9,8,
7,6,2,6,5,2,2,7,7,7,
4,7,2,5,7,7,7,3,3,5,
7,6,7,5,9,6,5,2,3,2,
4,9,2,5,5,8,3,3,1,2,
5,2,6,5,1,5,3,7,7,2),nrow=10, ncol=10, byrow = T)
r <- raster(m)
extent(r) <- matrix(c(0, 0, 10, 10), nrow=2)
plot(r)
text(r)
এই রাস্টার থেকে, আমি কীভাবে এই চিত্রণ অনুসারে বর্তমান ঘরের সংলগ্ন কোষগুলিতে মান (বা মান পরিবর্তন) নির্ধারণ করতে পারি? আমি এই কোড লাইন থেকে বর্তমান ঘরের মধ্যে একটি লাল পয়েন্ট রেখেছি:
points(xFromCol(r, col=5), yFromRow(r, row=5),col="red",pch=16)
এখানে, প্রত্যাশিত ফলাফলটি হবে:
যেখানে বর্তমান কক্ষের মান (অর্থাত্, মান রাস্টারে 5) এর পরিবর্তিত 0 হয়।
সামগ্রিকভাবে, 8 সংলগ্ন কক্ষের জন্য নতুন মানগুলি নিম্নলিখিত হিসাবে গণনা করতে হবে:
নতুন আয়াত = লাল আয়তক্ষেত্রের মধ্যে থাকা ঘরের মানগুলির গড় * বর্তমান ঘর (লাল বিন্দু) এবং সংলগ্ন ঘরের মধ্যে দূরত্ব (যেমন, বর্গাকার (2) ত্রিভুজ সংলগ্ন কোষের জন্য বা অন্যথায় 1)
হালনাগাদ
যখন সংলগ্ন কক্ষগুলির সীমানা রাস্টার সীমা ছাড়িয়ে যায়, তখন আমাকে সংলগ্ন কোষগুলির জন্য নতুন মান গণনা করতে হবে যা শর্তগুলিকে সম্মান করে। সংলগ্ন ঘরগুলি যা শর্তগুলিকে সম্মান করে না তারা "এনএ" এর সমান হবে।
উদাহরণস্বরূপ, যদি [সারি, কর্ন] স্বরলিপি ব্যবহার করে সি (5,5) এর পরিবর্তে রেফারেন্স অবস্থানটি সি (1,1) হয় তবে কেবল নীচের ডানদিকে ডানদিকে নতুন মান গণনা করা যেতে পারে। সুতরাং, প্রত্যাশিত ফলাফল হবে:
[,1] [,2] [,3]
[1,] NA NA NA
[2,] NA 0 NA
[3,] NA NA New_value
উদাহরণস্বরূপ, যদি রেফারেন্স পজিশনটি সি (3,1) হয় তবে কেবল উপরের-ডান, ডান এবং নীচে-ডান কোণে নতুন মান গণনা করা যেতে পারে। সুতরাং, প্রত্যাশিত ফলাফল হবে:
[,1] [,2] [,3]
[1,] NA NA New_value
[2,] NA 0 New_value
[3,] NA NA New_value
এখানে এই ফাংশনটি ব্যবহার করে আমার প্রথম প্রচেষ্টা করা হয়েছে focal
তবে একটি স্বয়ংক্রিয় কোড তৈরি করতে আমার কিছুটা সমস্যা আছে।
সংলগ্ন ঘরগুলি নির্বাচন করুন
mat_perc <- matrix(c(1,1,1,1,1,
1,1,1,1,1,
1,1,0,1,1,
1,1,1,1,1,
1,1,1,1,1), nrow=5, ncol=5, byrow = T)
cell_perc <- adjacent(r, cellFromRowCol(r, 5, 5), directions=mat_perc, pairs=FALSE, sorted=TRUE, include=TRUE)
r_perc <- rasterFromCells(r, cell_perc)
r_perc <- setValues(r_perc,extract(r, cell_perc))
plot(r_perc)
text(r_perc)
যদি সংলগ্ন ঘরটি বর্তমান ঘরটির উপরের-বাম কোণে অবস্থিত
focal_m <- matrix(c(1,1,NA,1,1,NA,NA,NA,NA), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)*sqrt(2)
test <- as.matrix(focal(r_perc, focal_m, focal_function))
যদি সংলগ্ন ঘরটি বর্তমান কক্ষের উপরের-মধ্য কোণে অবস্থিত
focal_m <- matrix(c(1,1,1,1,1,1,NA,NA,NA), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)
test <- as.matrix(focal(r_perc, focal_m, focal_function))
যদি সংলগ্ন ঘরটি বর্তমান ঘরটির উপরের-বাম কোণে অবস্থিত
focal_m <- matrix(c(NA,1,1,NA,1,1,NA,NA,NA), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)*sqrt(2)
test <- as.matrix(focal(r_perc, focal_m, focal_function))
যদি সংলগ্ন ঘরটি বর্তমান কক্ষের বাম কোণে অবস্থিত
focal_m <- matrix(c(1,1,NA,1,1,NA,1,1,NA), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)
test <- as.matrix(focal(r_perc, focal_m, focal_function))
যদি সংলগ্ন ঘরটি বর্তমান কক্ষের ডান কোণে অবস্থিত
focal_m <- matrix(c(NA,1,1,NA,1,1,NA,1,1), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)
test <- as.matrix(focal(r_perc, focal_m, focal_function))
যদি সংলগ্ন ঘরটি বর্তমান ঘরটির নীচে-বাম কোণে অবস্থিত
focal_m <- matrix(c(NA,NA,NA,1,1,NA,1,1,NA), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)*sqrt(2)
test <- as.matrix(focal(r_perc, focal_m, focal_function))
যদি সংলগ্ন ঘরটি বর্তমান ঘরটির নীচে-মাঝের কোণে অবস্থিত
focal_m <- matrix(c(NA,NA,NA,1,1,1,1,1,1), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)
test <- as.matrix(focal(r_perc, focal_m, focal_function))
যদি সংলগ্ন ঘরটি বর্তমান ঘরটির নীচে-ডান কোণে অবস্থিত
focal_m <- matrix(c(NA,NA,NA,NA,1,1,NA,1,1), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)*sqrt(2)
test <- as.matrix(focal(r_perc, focal_m, focal_function))
mat <- matrix(c(1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5, ncol=5, byrow = T)
f.rast <- function(x) mean(x)*sqrt(2)
aggr <- as.matrix(focal(r, mat, f.rast))
। আমি কীভাবে বর্তমান কক্ষের 8 টি সংলগ্ন কক্ষগুলির জন্য ফলাফল পেতে পারি এবং সমস্ত রাস্টার নয়? এখানে, ফলাফলের হওয়া উচিত: res <- matrix(c(7.42,0,0,0,0,0,0,0,0), nrow=3, ncol=3, byrow = T)
। অনেক ধন্যবাদ !
raster
প্যাকেজ এবংfocal()
ফাংশনটি দেখুন (পৃষ্ঠা 90 ডকুমেন্টেশন): cran.r-project.org/web/packages/raster/raster.pdf