我正在尝试总结NDVI值的卫星图像的栅格值。我已经提取了数据,似乎已经填充了一个列表,我可以在控制台窗口中看到该列表,但是我无法使用“查看”功能来查看它,也无法将其创建为.csv。
示例数据
library(raster)
r <- raster(ncol=36, nrow=18, vals=1:(18*36))
ndvi <- stack(r, r*2, r*3)
cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20))
cds2 <- rbind(c(80,0), c(100,60), c(120,0), c(120,-55), c(80,0))
polys <- spPolygons(cds1, cds2)
提取值
v <- extract(ndvi, polys)
写入文件
write.csv(v, "test.csv")
#Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 38, 23
str(v)
#List of 2
# $ : num [1:38, 1:3] 326 327 328 329 330 331 332 333 334 335 ...
# ..- attr(*, "dimnames")=List of 2
# .. ..$ : NULL
# .. ..$ : chr [1:3] "layer.1" "layer.2" "layer.3"
# $ : num [1:23, 1:3] 173 208 209 244 245 280 281 282 315 316 ...
# ..- attr(*, "dimnames")=List of 2
# .. ..$ : NULL
# .. ..$ : chr [1:3] "layer.1" "layer.2" "layer.3"
我希望能够使用NDVI图像的像元值分布在某个时候将其与另一组数据进行关联,因此,为了做到这一点,我需要具有所有单元格的值。预先谢谢你。
答案 0 :(得分:0)
我们不知道对象类型vals_03_01
是什么,因为您没有提供有关shp
对象的信息。根据栅格和sp的输入,输出可能会完全不同。如果空间矢量对象包含多边形,那么vals_03_01
将是一个列表。如果shp
是点,则提取将返回向量(对于单个栅格)或矩阵(对于堆栈/砖,其中列表示堆栈中的每个栅格)。
请使用vals_03_01
,class
和dim
查看str
对象的类,尺寸和结构。这将告诉您数据是否适合将结果直接写入平面文件,或者在导出之前需要其他处理/摘要(例如lapply
)。很有可能extract
返回了一个包含矩阵对象的列表。
答案 1 :(得分:0)
v
是一个列表。列表中的每个元素都有一个由多边形覆盖的栅格像元值。单元格的数量因多边形而异,因此您不能将其变成矩形矩阵。
这意味着您不能使用write.csv
或View
。
您是否仍然需要一个“ csv”文件(您如何需要某种文件类型进行关联)?您可以改为使用saveRDS(v, "test.rds")
。
也许每个多边形都需要一个值? 在这种情况下,您可以执行以下操作:
v <- extract(ndvi, polys, mean, na.rm=TRUE)
v
# layer.1 layer.2 layer.3
#[1,] 387.8158 775.6316 1163.4474
#[2,] 329.3913 658.7826 988.1739
write.csv(v, "test.csv")
请参见?raster::extract