r-rasterFromXYZ警告:数据长度不是行数的亚倍数或倍数

  • 本文关键字:警告 数据 r-rasterFromXYZ r raster
  • 更新时间 :
  • 英文 :


我是地理空间数据的新手,我正在尝试将带有lat/lon和值的.csv数据集加载为多层光栅文件。以下是数据看起来像的样子

> df
# A tibble: 1,323 x 6
ISO     LAT   LON exposed_assets exposed_pop windspeed
<chr> <dbl> <dbl>          <dbl>       <dbl>     <dbl>
1 MEX    15.7 -97.1             0         0         34.9
2 MEX    15.7 -97            2152.        8.62      34.0
3 MEX    15.8 -97.3             0         0         35.2
4 MEX    15.8 -97.2        352191.      167.        34.4
etc

raster包中的方法rasterFromXYZ似乎应该满足我的需要,但我收到了以下警告

> r = rasterFromXYZ(df[-1])
Warning message:
In matrix(values, nrow = ncell(x), ncol = nlayers(x)) :
data length [22263] is not a sub-multiple or multiple of the number of rows [7425]

数据加载不正确。如您所见,rwindspeed的最大值为2151.701,但该值实际上位于.csv文件的exposed_pop列中。

> r
class      : RasterBrick 
dimensions : 99, 75, 7425, 3  (nrow, ncol, ncell, nlayers)
resolution : 0.1, 0.1  (x, y)
extent     : 15.65, 23.15, -106.85, -96.95  (xmin, xmax, ymin, ymax)
crs        : NA 
source     : memory
names      : exposed_assets,  exposed_pop,    windspeed 
min values :         0.0000,       0.0000,      34.0037 
max values :   66472940.491,    47620.445,     2151.701

我检查了数据帧中没有重复或NA值,那么这个警告的原因是什么?我如何正确加载这个数据?

对于再现性,这里是看起来有问题的数据子集(给出相同的警告并为windspeed加载错误的值(

> dput(df[1110:1135,-1])
structure(list(LAT = c(21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 
21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 
21.9, 21.9, 21.9, 21.9, 22, 22, 22, 22), LON = c(-106.7, -106.6, 
-106, -105.9, -105.8, -105.7, -105.6, -105.5, -105.4, -105.3, 
-105.2, -105.1, -105, -104.9, -104.8, -104.7, -104.6, -104.5, 
-104.4, -104.3, -104.2, -104.1, -106, -105.9, -105.8, -105.7), 
exposed_assets = c(0, 0, 0, 0, 0, 222972.894088, 2463194.45998, 
5177821.32741, 6713738.64112, 17980448.5808, 13707489.7546, 
14975480.4695, 7773565.02961, 3224217.43413, 7403629.83371, 
7066001.45019, 4229731.31557, 3810642.16981, 3705484.76291, 
2861531.43593, 4994856.14058, 6330653.64562, 0, 0, 0, 509998.137351
), exposed_pop = c(0, 0, 0, 0, 0, 27.9003314972, 325.891448975, 
777.652648926, 1305.87854004, 5254.45507812, 2812.10693359, 
3389.27685547, 1154.47375488, 161.85168457, 824.549377441, 
700.931152344, 248.07270813, 198.266082764, 178.928314209, 
108.784866333, 324.559875488, 484.665252686, 0, 0, 0, 54.7332305908
), windspeed = c(58.305871031, 61.2305201929, 75.1606977525, 
75.6692450358, 75.2585164937, 73.9301376648, 71.8375101982, 
69.2120544391, 66.2811279675, 63.2245023136, 60.1662838419, 
57.183936863, 54.3213107924, 51.6000196116, 49.0277997888, 
46.604147059, 44.3239358955, 42.1796684768, 40.1628344475, 
38.264709033, 36.4768026702, 34.7910975464, 70.3395670652, 
70.6504099539, 70.2394850598, 69.1322960305)), row.names = c(NA, 
-26L), class = c("tbl_df", "tbl", "data.frame"))

谢谢!

您发现了一个错误(在github的开发版本中已修复(。但是有一个简单的解决方案

x = structure(list(LAT = c(21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 
21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 21.9, 
21.9, 21.9, 21.9, 21.9, 22, 22, 22, 22), LON = c(-106.7, -106.6, 
-106, -105.9, -105.8, -105.7, -105.6, -105.5, -105.4, -105.3, 
-105.2, -105.1, -105, -104.9, -104.8, -104.7, -104.6, -104.5, 
-104.4, -104.3, -104.2, -104.1, -106, -105.9, -105.8, -105.7), 
exposed_assets = c(0, 0, 0, 0, 0, 222972.894088, 2463194.45998, 
5177821.32741, 6713738.64112, 17980448.5808, 13707489.7546, 
14975480.4695, 7773565.02961, 3224217.43413, 7403629.83371, 
7066001.45019, 4229731.31557, 3810642.16981, 3705484.76291, 
2861531.43593, 4994856.14058, 6330653.64562, 0, 0, 0, 509998.137351
), exposed_pop = c(0, 0, 0, 0, 0, 27.9003314972, 325.891448975, 
777.652648926, 1305.87854004, 5254.45507812, 2812.10693359, 
3389.27685547, 1154.47375488, 161.85168457, 824.549377441, 
700.931152344, 248.07270813, 198.266082764, 178.928314209, 
108.784866333, 324.559875488, 484.665252686, 0, 0, 0, 54.7332305908
), windspeed = c(58.305871031, 61.2305201929, 75.1606977525, 
75.6692450358, 75.2585164937, 73.9301376648, 71.8375101982, 
69.2120544391, 66.2811279675, 63.2245023136, 60.1662838419, 
57.183936863, 54.3213107924, 51.6000196116, 49.0277997888, 
46.604147059, 44.3239358955, 42.1796684768, 40.1628344475, 
38.264709033, 36.4768026702, 34.7910975464, 70.3395670652, 
70.6504099539, 70.2394850598, 69.1322960305)), row.names = c(NA, 
-26L), class = c("tbl_df", "tbl", "data.frame"))

首先,修复数据。顺序总是lon,lat

y <- x[,c(2:1,3:5)]

现在它工作

r <- rasterFromXYZ(y)

是一种变通方法,它也适用于顺序错误的数据,也许你需要它来处理整个数据集

y <- data.frame(y)
rr <- rasterFromXYZ(y[,1:2])
rr <- rasterize(y[,1:2], rr, field=y[,3:5])

相关内容

最新更新