【问题标题】:Creating for loop, df to ascii with x y z用 x y z 创建 for 循环,df 到 ascii
【发布时间】:2020-10-25 23:49:41
【问题描述】:

我有一个数据框:

总共超过 300 万行和 1800 种(学名)

下面的代码创建了一个 0.5 度比例的空栅格..

library(raster)
ext <- extent(-180.0, 180, -90.0, 90.0)
gridsize <- 0.5
tempraster<- raster(ext, res=gridsize)
crs(tempraster) <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"`

#然后下面的代码一次用一个物种的 x y 数据填充该栅格,根据科学名称创建一个 ascii,其中物种存在时为 1,不存在时为 0。

selection<-animals
spp <- unique(animals$scientific_name)
result <- list()
for (i in 1:length(spp)) {
  spi <- selection[selection$scientific_name == spp[i], c("lon", "lat")]      
  fname <- paste0(spp[i], ".asc")
  result[[i]] <- rasterize(spi, tempraster, fun="count", filename=fname, background = 0, overwrite = TRUE)}

我想调整此代码,以便在生成的 ascii 中物种所在的位置不为 1,而是使用总列中的值。不幸的是,我是 for 循环和其他功能的初学者,所以我寻求任何帮助。

【问题讨论】:

  • 这里的ascii是什么意思? ASCII?不确定您申请的tag 是否相关...

标签: r dataframe for-loop ascii


【解决方案1】:

rasterize() 函数有 field 参数,所以你可以这样调用它:

result[[i]] <- rasterize(spi, tempraster, 
                         field=selection[selection$scientific_name == spp[i], "total"], 
                         fun=sum,
                         filename=fname, background = 0, 
                         overwrite = TRUE)

【讨论】:

  • 就是这样,我知道我可以使用不同的功能,例如光栅化,但不知道如何将其编辑到现有代码中 - 谢谢!
  • 很高兴如果它有帮助。如果您的问题得到解决,请随时mark it as such。另外,也许可以考虑更改问题的标题-我认为这实际上与for 循环无关,而与rasterize() 的使用有关。
  • 另外,请注意我从您的代码中删除了 fun=count 部分。有了它, rasterize 将在单元格中放置出现次数。当 fun 未定义时,rasterize() 使用 last() 函数 - 我认为这在您的用例中也不正确,您应该使用 fun=sum。我现在已将其添加到我的答案中。
猜你喜欢
  • 2021-02-27
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多