【问题标题】:How to create an individual dataframe for each column in R to then rasterize and bind all raster layers into multi-layer raster?如何为 R 中的每一列创建一个单独的数据框,然后将所有栅格图层栅格化并将其绑定到多层栅格中?
【发布时间】:2021-01-16 02:30:40
【问题描述】:

所以我有一个反射率数据框,前两列是 lon 和 lat,之后的每一列是一个波长(其中 z 是反射率值):

(但我将 lon 和 lat 之后的每一列的名称更改为“refl”)

#lon, lat, band1, band2, band3, band4, etc.
#x,y,z,z,z,z...
#x,y,z,z,z,z...

我正在尝试创建一个多层栅格,并且可以通过以下代码使用一层 (xyz):

data<-read.csv("data.csv)
layer1<-data[,c(1:3)] # to select the first two lon and lat column and the band1 column
x <- raster(xmn=151.9124, xmx=151.9146, ymn=-23.4473, ymx=-23.44518, res=0.00001, crs="+proj=longlat +datum=WGS84")
specras <- rasterize(layer1[, c('lon', 'lat')], x, layer1[, 'refl'], fun=mean)

this is how one raster layer looks like plotted

一旦我有了一个栅格层,我如何创建一个循环以将 data 中的所有后续列变成栅格层,然后将它们全部绑定以形成 RasterStack?我有大约 1000 个波段值/列。

希望以这种形式写一些东西,但似乎无法让它工作:

for (i in (3:ncol(data))){
  layer<-data[,c(1:2,i)]
  specrast<-rasterize(layer[, c('lon', 'lat')], x, layer[, 'refl'], fun=mean)
  specbrick<-addLayer(specrast)
}

【问题讨论】:

    标签: r loops raster sapply


    【解决方案1】:

    你应该需要一个循环并且能够使用

    library(raster)
    x <- raster(xmn=151.9124, xmx=151.9146, ymn=-23.4473, ymx=-23.44518, res=0.00001, crs="+proj=longlat +datum=WGS84")
    sr <- rasterize(data[, c('lon', 'lat')], x, data[, -c(1:2)], fun=mean)
    

    你的循环可以这样工作

    s <- list()
    for (i in (3:ncol(data))){
      s[[i-2]] <- rasterize(data[, c('lon', 'lat')], x, data[, i], fun=mean)
    }
    sr <- stack(s)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      相关资源
      最近更新 更多