You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将修改后的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:45:38