【发布时间】:2019-06-10 13:51:56
【问题描述】:
我想遍历包含世界形状文件的国家名称列表并创建每个国家的单独形状文件。然后我想对每个 shapefile 的栅格进行计算,并将结果强制转换为以国家名称作为 ID 变量的数据框。
我已经为某个国家/地区成功编写了这篇文章,但我正在努力让它正确循环。
liech.map <- world.polys[world.polys$NAME == "Liechtenstein",]
plot(liech.map)
rasters <- stack(raster_1, raster_2)
rasters.values <- extract(rasters, liech.map)
df <- as.data.frame(rasters.values)
var <- as.data.frame(weighted.mean(x=df$raster_1, w=df$raster_2, na.rm=TRUE))
我想做的是从世界多边形 shapefile 中提取国家名称列表,为该国家创建一个单独的多边形并将其循环到每个国家。然后为每个具有国家 ID 的国家/地区输出 1 个带有“var”的数据框。
编辑
这是我到目前为止所做的事情,我真正想做的是向以下代码提供一个 ID 代码/名称列表以循环遍历。我当然可以手动复制粘贴 200 多次,但这似乎太浪费时间了!!
### leichenstein map
## 69.67 sec elapsed
tic()
LTU.map <- world.polys[world.polys$ISO3 == "LTU",]
rasters.values <- extract(rasters, LTU.map)
df <- as.data.frame(rasters.values)
rugged_LTU <- as.data.frame(weighted.mean(x=df$raster_1, w=df$raster_2, na.rm=TRUE))
var_LTU$iso3 <- "LTU"
rm(LTU.map)
toc()
# define master dataframe once
var_master <- var_LTU
### UK map
## 127.31 sec elapsed
tic()
GBR.map <- world.polys[world.polys$ISO3 == "GBR",]
rasters.values <- extract(rasters, GBR.map)
df <- as.data.frame(rasters.values)
rugged_GBR <- as.data.frame(weighted.mean(x=df$raster_1, w=df$raster_2, na.rm=TRUE))
var_GBR$iso3 <- "GBR"
var_master <- rbind(var_master, var_GBR)
rm(GBR.map)
toc()
【问题讨论】:
-
您好 Picko90,欢迎来到该网站。您能否用一个更具重现性的示例来编辑您的帖子?可以复制/粘贴和运行的东西将是理想的。如果您使用的包带有一些预加载的数据,这通常很容易。现在,你操作的对象的结构我还不清楚,所以很难回答。
-
嗨,对不起,我是 R 的相对新手,所以我不太确定如何制作可重现的示例......!
-
你可以看看at this question。在您的示例中,我不知道
world.polys是什么,或者raster_1和raster_2等。请尝试发布一个包含足够代码的独立示例供人们运行它。 -
@Picko90,可以参考How to create a Minimal, Reproducible Example。另外,相关:How to Ask。您最小的、可重复的示例将大大增加您在此站点上获得帮助的机会。
标签: r dataframe polygon raster