将 RasterBrick 尺寸从 TXY 更改为 XYT
Change RasterBrick dimensions from TXY to XYT
我正在尝试将 netCDF
文件导入 R
中的 RasterBrick
。 netCDF
文件有 3 个维度。
library(ncdf)
nc <- open.ncdf("fm100_2003.nc");
print(nc)
[1] "file fm100_2003.nc has 3 dimensions:"
[1] "lon Size: 1386"
[1] "lat Size: 585"
[1] "day Size: 365"
[1] "------------------------"
[1] "file fm100_2003.nc has 1 variables:"
[1] "short dead_fuel_moisture_100hr[day,lon,lat] Longname:dead_fuel_moisture_100hr Missval:-9999"
日维度的大小对应一年(365天)的每日燃料水分。我想将这些导入 RasterBrick
以进行额外的分析,这非常简单
r <- "fm100_2003.nc"
b <- brick(r,varname="dead_fuel_moisture_100hr")
但是,问题是 RasterBrick
中的 ncol
和 nlayers
被调换了,这导致砖块中的每一层的 rasterLayer
都不正确。 RasterBrick
的尺寸应显示为 1386、585、505890、365 而不是以下尺寸:
class : RasterBrick
dimensions : 1386, 365, 505890, 585 (nrow, ncol, ncell, nlayers)
resolution : 1, 0.04166667 (x, y)
extent : 37619.5, 37984.5, -124.793, -67.043 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : fm100_2003.nc
names : X49.3960227966309, X49.3543561299642, X49.3126894632975, X49.2710227966309, X49.2293561299642, X49.1876894632975, X49.1460227966309, X49.1043561299642, X49.0626894632975, X49.0210227966309, X48.9793561299642, X48.9376894632975, X48.8960227966309, X48.8543561299642, X48.8126894632975, ...
degrees_north: 25.0626894632975, 49.3960227966309 (min, max)
varname : dead_fuel_moisture_100hr
我想知道在创建RasterBrick
时是否有任何方法可以指定维度来避免这个问题?
奇怪,为什么尺寸不对。您可以使用以下命令探索您的 ncdf 文件:
# Open your dimension
# following by '$' you can use tab to see the next available command (R Studio)
r$dim
# REad value for each dimension
lon = get.var.ncdf(r, varid='lon')
lat = get.var.ncdf(r, varid='lat')
time = get.var.ncdf(r, varid='day')
我能够找到解决上述问题的方法(或者可能是变通方法)。
我首先将 netCDF
文件导入到 R
中的数组中。
dname <- "dead_fuel_moisture_100hr"
array1 <- get.var.ncdf(nc, dname)
dim(array1)
[1] 365 1386 585
array1 的维度是:天数、列数、行数。但是,我可以更改数组的维度:
array2<-aperm(array1, c(3, 2, 1))
dim(array2)
[1] 585 1386 365
现在数组已正确组织:行、列、天。此时我可以访问我需要的深度范围(第 1 天到第 365 天)作为矩阵:
fm.day.001<-array2[,,1]
...
fm.day.365<-array2[,,365]
矩阵也可以转换为栅格:
r2<-raster(nrow=585,ncol=1386,vals=fm.day.001, xmn=-124.7722, xmx=-67.06383, ymn=25.06269, ymx=49.39602)
你可以试试dims
的说法。类似于:
b <- brick("fm100_2003.nc", varname="dead_fuel_moisture_100hr", dims=3:1)
这是实验性的。即使它创建了正确的对象,该对象也可能无法用于后续操作。
我正在尝试将 netCDF
文件导入 R
中的 RasterBrick
。 netCDF
文件有 3 个维度。
library(ncdf)
nc <- open.ncdf("fm100_2003.nc");
print(nc)
[1] "file fm100_2003.nc has 3 dimensions:"
[1] "lon Size: 1386"
[1] "lat Size: 585"
[1] "day Size: 365"
[1] "------------------------"
[1] "file fm100_2003.nc has 1 variables:"
[1] "short dead_fuel_moisture_100hr[day,lon,lat] Longname:dead_fuel_moisture_100hr Missval:-9999"
日维度的大小对应一年(365天)的每日燃料水分。我想将这些导入 RasterBrick
以进行额外的分析,这非常简单
r <- "fm100_2003.nc"
b <- brick(r,varname="dead_fuel_moisture_100hr")
但是,问题是 RasterBrick
中的 ncol
和 nlayers
被调换了,这导致砖块中的每一层的 rasterLayer
都不正确。 RasterBrick
的尺寸应显示为 1386、585、505890、365 而不是以下尺寸:
class : RasterBrick
dimensions : 1386, 365, 505890, 585 (nrow, ncol, ncell, nlayers)
resolution : 1, 0.04166667 (x, y)
extent : 37619.5, 37984.5, -124.793, -67.043 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : fm100_2003.nc
names : X49.3960227966309, X49.3543561299642, X49.3126894632975, X49.2710227966309, X49.2293561299642, X49.1876894632975, X49.1460227966309, X49.1043561299642, X49.0626894632975, X49.0210227966309, X48.9793561299642, X48.9376894632975, X48.8960227966309, X48.8543561299642, X48.8126894632975, ...
degrees_north: 25.0626894632975, 49.3960227966309 (min, max)
varname : dead_fuel_moisture_100hr
我想知道在创建RasterBrick
时是否有任何方法可以指定维度来避免这个问题?
奇怪,为什么尺寸不对。您可以使用以下命令探索您的 ncdf 文件:
# Open your dimension
# following by '$' you can use tab to see the next available command (R Studio)
r$dim
# REad value for each dimension
lon = get.var.ncdf(r, varid='lon')
lat = get.var.ncdf(r, varid='lat')
time = get.var.ncdf(r, varid='day')
我能够找到解决上述问题的方法(或者可能是变通方法)。
我首先将 netCDF
文件导入到 R
中的数组中。
dname <- "dead_fuel_moisture_100hr"
array1 <- get.var.ncdf(nc, dname)
dim(array1)
[1] 365 1386 585
array1 的维度是:天数、列数、行数。但是,我可以更改数组的维度:
array2<-aperm(array1, c(3, 2, 1))
dim(array2)
[1] 585 1386 365
现在数组已正确组织:行、列、天。此时我可以访问我需要的深度范围(第 1 天到第 365 天)作为矩阵:
fm.day.001<-array2[,,1]
...
fm.day.365<-array2[,,365]
矩阵也可以转换为栅格:
r2<-raster(nrow=585,ncol=1386,vals=fm.day.001, xmn=-124.7722, xmx=-67.06383, ymn=25.06269, ymx=49.39602)
你可以试试dims
的说法。类似于:
b <- brick("fm100_2003.nc", varname="dead_fuel_moisture_100hr", dims=3:1)
这是实验性的。即使它创建了正确的对象,该对象也可能无法用于后续操作。