我有一个案例,我需要在 for 循环函数中使用数据框。在这种情况下,它是“高效的”,但是请记住,数据库很小,循环中的迭代非常简单。但也许该代码可能对具有类似条件的人有用。
for 循环的目的是沿五个位置(即 5 东京、纽约、圣保罗、苏尔和墨西哥城)使用栅格提取功能,每个位置都有各自的栅格网格。我有一个空间点数据库,在 5 个不同位置分配了 1000 多个观测值,我需要从 10 个不同的栅格网格(每个位置两个网格)中提取信息。此外,对于后续分析,我不仅需要栅格值,还需要每个观测值的唯一 ID。
准备好空间数据后,包括以下任务:
- 使用readOGR函数导入点 shapefile (rgdap 包)
- 使用光栅功能导入光栅文件(光栅包)
- 使用函数堆栈(光栅包)将同一位置的网格堆叠到一个文件中
这里使用数据框的for 循环代码:
1. 将每个位置的堆叠栅格添加到列表中
raslist <- list(LOC1,LOC2,LOC3,LOC4,LOC5)
2. 创建一个空数据框,这将是输出文件
TB <- data.frame(VAR1=double(),VAR2=double(),ID=character())
3.设置for循环功能
L1 <- seq(1,5,1) # the location ID is a numeric variable with values from 1 to 5
for (i in 1:length(L1)) {
dat=subset(points,LOCATION==i) # select corresponding points for location [i]
t=data.frame(extract(raslist[[i]],dat),dat$ID) # run extract function with points & raster stack for location [i]
names(t)=c("VAR1","VAR2","ID")
TB=rbind(TB,t)
}