r - 在创建 SpatialPointDataFrame 时忽略行,其中 rasterstack 的任何栅格层的单个像素值为 NA
问题描述
我有三个栅格,例如 r1、r2、r3。我想使用 rasterToPoints() 从这些栅格中创建一个空间点数据框。但问题是,我想在执行 rasterToPoints() 期间忽略任何包含至少一个 NA 的行。
library(raster)
r1 = raster(matrix(c(1,NA,2,3,4,5,NA,5,6), byrow = TRUE))
r2 = raster(matrix(c(1,2,2,NA,4,5,NA,5,64), byrow = TRUE))
r3 = raster(matrix(c(1,NA,2,3,56,5,54,5,6), byrow = TRUE))
r = stack(r1,r2,r3)
r_spdf = rasterToPoints(r, spatial = TRUE)
r_spdf@data
layer.1 layer.2 layer.3
1 1 1 1
2 NA 2 NA
3 2 2 2
4 3 NA 3
5 4 4 56
6 5 5 5
7 NA NA 54
8 5 5 5
9 6 64 6
我想忽略 r_spdf@data 中的整行,如果有一个单元格是 NA 并且输出如下:
layer.1 layer.2 layer.3
1 1 1 1
2 2 2 2
3 4 4 56
4 5 5 5
5 5 5 5
6 6 64 6
随后 r_spdf@coords 将仅具有上述行的坐标,例如:
> r_spdf@coords
x y
[1,] 0.5 0.94444444
[2,] 0.5 0.72222222
[3,] 0.5 0.50000000
[4,] 0.5 0.38888889
[5,] 0.5 0.16666667
[6,] 0.5 0.05555556
解决方案
我们可以使用complete.cases
查找 中的任何缺失值,data
然后从data
和中删除相应的索引coords
。
inds <- complete.cases(r_spdf@data)
#Or another way to calculate inds is using rowSums
#inds <- !rowSums(is.na(r_spdf@data)) > 0
#now subset the Spatial object
r_spdf <- r_spdf[inds, ]
r_spdf@data
# layer.1 layer.2 layer.3
#1 1 1 1
#3 2 2 2
#5 4 4 56
#6 5 5 5
#8 5 5 5
#9 6 64 6
r_spdf@coords
# x y
#[1,] 0.5 0.94444444
#[2,] 0.5 0.72222222
#[3,] 0.5 0.50000000
#[4,] 0.5 0.38888889
#[5,] 0.5 0.16666667
#[6,] 0.5 0.05555556
推荐阅读
- python - 如何使用#Python 从网站下载音乐文件
- flutter - 在 TextFormField 上使用snackBar 创建自定义错误消息
- wordpress - Woocommerce 单一产品页面无法正常工作
- mongodb - 当 _id 动态生成时,mongoosastic 引用如何不起作用
- visual-studio - 简单的 void 方法有效,但协程抛出空引用异常
- python - 通过外键模型字段验证多对多模型的唯一性
- google-apps-script - 如何按包含特定标题的列对电子表格进行排序?
- ios - 以编程方式提供呼叫转移?
- python - Pandas - 遍历特定列中的行并找到空单元格
- typescript - 错误 TS5023:未知的编译器选项“resolveJsonModule”