【问题标题】:Loop through categories in a column and perform interpolation on only those records遍历列中的类别并仅对这些记录执行插值
【发布时间】:2015-06-16 14:44:19
【问题描述】:

我有一个带有采样位置的数据框。 我想为每个独特的物种选择数据,因此遍历所有独特的物种名称,并为每个物种创建一个插值层。然后按物种名称命名结果。插值部分工作正常……我只是不知道如何遍历每个物种名称并进行命名…… 我已经粘贴了下面的工作代码,用于选择一个物种名称并创建一个插值层。

                          SP_NAME        sno       swgt    latdd     londd
1              ILLEX ILLECEBROSUS 33.7542857 2.94582857 43.28667 -60.99367
2        CHLOROPHTHALMUS AGASSIZI 13.2971429 0.09205714 43.28667 -60.99367
3              ILLEX ILLECEBROSUS  0.9657143 0.16417143 43.94750 -58.72417
4              ZOARCES AMERICANUS  0.9657143 0.02897143 43.94750 -58.72417
5               AMBLYRAJA RADIATA  2.0457143 1.00240000 43.86483 -59.19717
6 MYOXOCEPHALUS OCTODECEMSPINOSUS  1.0228571 0.10228571 43.86483 -59.19717


setwd("C:/Michelle/Michelle/R/WCTS/Boundaries")
strata <- readOGR(".", "SurveyStrataWGS84")
strata<-spTransform(strata,CRS("+proj=utm +zone=20 ellps=WGS84"))

es_tows1 <- es_tows[which(es_tows$SP_NAME == "HIPPOGLOSSOIDES PLATESSOIDES"),]

ext = extent(strata)
rb <- raster(ext, ncol=554, nrow=279)
stratar <- rasterize(strata, rb)
plot(stratar)
idw.grid<- rasterToPoints(stratar, spatial=TRUE)
gridded(idw.grid) <- TRUE
proj4string(es_tows1) <- CRS("+proj=utm +zone=20 ellps=WGS84")

idw(log(es_tows1$swgt+ 0.00001) ~1 , es_tows1, idw.grid)

pal <- colorRampPalette(rev(brewer.pal(11, "Spectral")))(100)
spplot(idw.out, "var1.pred", col.regions=pal)

【问题讨论】:

  • for(species in unique(df$SP_NAME)){...}

标签: r loops gis interpolation


【解决方案1】:
library(rgdal)
library(raster)
strata <- readOGR(".", "SurveyStrataWGS84")
strata <- spTransform(strata,CRS("+proj=utm +zone=20 ellps=WGS84"))
ext <- extent(strata)
rb <- raster(ext, ncol=554, nrow=279)
# I think this is all you need to do here 
idw.grid <- as(rb, 'SpatialGrid')

# list of species
species <- unique(es_tows$SP_NAME)

for (sp in species) {
    es_tows1 <- es_tows[es_tows$SP_NAME == sp, ]
    out <- idw(log(es_tows1$swgt+ 0.00001) ~1 , es_tows1, idw.grid)
    # ... save the results ....
    writeRaster(raster(out), filename=sp)
}

【讨论】:

  • 谢谢,这太棒了。它运行良好,我很欣赏您在代码的第一部分中发现的效率。
  • 哦,还有一个简单的问题@RobertH,我如何将 .tif 文件扩展名添加到这一行中 sp 变量的末尾writeRaster(raster(out), filename=sp, datatype='GTiff', overwrite=TRUE)
  • 你不需要像你指定的datatype='GTiff',但你可以做filename=paste0(sp, '.tif')
猜你喜欢
  • 2012-01-12
  • 2022-11-29
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
相关资源
最近更新 更多