如何将修改后的data.frame转回terra的SpatRaster(as.data.frame逆操作)
将修改后的data.frame转回SpatRaster对象(terra包)
当你用as.data.frame(x, cell=TRUE)把SpatRaster转成带单元格序号的data.frame并修改后,可以通过以下两种方式转回SpatRaster:
情况1:保留了原始SpatRaster模板(如示例中的x)
这是最简便的方式,直接基于原始栅格的结构,将修改后的数据按单元格序号匹配赋值:
# 假设已修改x.df中的数据 # 复制原始栅格的结构 new_raster <- x # 按cell序号对齐,将修改后的数据赋值给新栅格 values(new_raster) <- x.df[match(1:ncell(new_raster), x.df$cell), -1]
说明
match(1:ncell(new_raster), x.df$cell)用来确保修改后的data.frame行顺序和栅格的单元格顺序(行优先)一致,避免因data.frame行序改变导致赋值错位。-1是排除cell列,只取各波段的数值列。
情况2:未保留原始SpatRaster模板
如果原始栅格对象已不存在,需要先重建与原栅格参数一致的空栅格,再赋值:
# 重建和原栅格一致的空栅格(需知道原栅格的extent、ncol、nrow、crs和波段数) band_num <- ncol(x.df) - 1 # 波段数=数据列数(总列数减cell列) empty_raster <- rast( extent = c(-108, -105, 39, 42), ncol = 14, nrow = 14, crs = "epsg:4326", nlyr = band_num ) # 按cell序号匹配赋值 values(empty_raster) <- x.df[match(1:ncell(empty_raster), x.df$cell), -1]
注意事项
- 如果
x.df中存在缺失的cell值,对应栅格单元格会被赋值为NA。 - 如果
x.df中有重复的cell记录,match会取第一个匹配的值进行赋值。
内容的提问来源于stack exchange,提问作者user2955884
相关产品推荐
相关产品推荐

