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

如何用tidy/dplyr修改ERA5栅格经度范围(0-360转-180-180)

用tidyverse/dplyr转换ERA5数据经度范围(0-360 → -180-180)

完全可以用tidyverse生态工具实现这个转换,核心是将栅格数据转为tidy格式的数据框,调整经度值后按需转回栅格或保留tidy格式。以下是具体操作步骤:

1. 加载依赖包

library(terra)
library(dplyr)
library(tidyraster) # 可选,简化栅格与tidy格式的衔接

2. 转tidy格式并调整经度

方法一:用tidyraster简化操作

tidyraster能直接将SpatRaster转为符合tidy规范的tibble,方便后续dplyr操作:

era5_tidy <- era5_sr %>% 
  as_tibble(xy = TRUE, na.rm = FALSE) %>% # 保留经纬度列(x为经度,y为纬度)
  mutate(
    # 经度转换规则:大于180的数值减去360,其余保持不变
    x = ifelse(x > 180, x - 360, x)
  ) %>% 
  arrange(x, y) # 按经纬度排序,保证空间顺序正确

方法二:直接用terra+dplyr

如果不想额外安装tidyraster,用terra原生的as.data.frame也能实现:

era5_df <- era5_sr %>% 
  as.data.frame(xy = TRUE, na.rm = FALSE) %>% 
  mutate(
    x = ifelse(x > 180, x - 360, x)
  ) %>% 
  arrange(x, y)

3. (可选)转回SpatRaster格式

如果需要回到栅格格式,可通过terra重建栅格并填充数据:

# 定义新的空间范围(-180到180经度,-90到90纬度)
new_extent <- ext(-180, 180, -90, 90)
# 创建空栅格模板,匹配原数据的分辨率和坐标系
new_raster_template <- rast(new_extent, res = res(era5_sr), crs = crs(era5_sr))

# 将tidy数据框转回栅格
era5_sr_180 <- rasterize(era5_df[, c("x", "y")], new_raster_template, era5_df[, -c(1,2)])

注意事项

  • 转换后必须按经度排序,否则空间数据的排列会出现混乱
  • 对于多时相数据(如示例中的744个时间层),可根据需求用pivot_longer转成长格式处理,再转回宽格式
  • tidyraster提供了更贴合tidyverse风格的栅格操作,能减少代码冗余

内容的提问来源于stack exchange,提问作者herakles_1950

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:36:17