在我们日常使用数据时,我们获取的数据并不是连续的网格,而是网格状的离散数据。
这时,我们就需要利用拥有的离散网格数据,自定义将其插值。
通常插值我们需要shp文件给予边界,不过,只要知道了所需区域的经纬度范围,我们可以自行构建网格将点数据插值在自己定义的经纬度范围中。
本文包含:

  1. nc文件批量读取
  2. 构造网格点,空间插画
  3. 从字符串中提取日期,并转换
  4. 日均转月均
  5. nc格式导出

数据说明与读取

本次数据为OCO系列卫星数据的CO2数据,空间分辨率:约为1.75km网格状的离散数据,存储方式为nc。

library('ncdf4')
library('lubridate')
library('sp')
library('raster')
library('magrittr')
library('dplyr')
library('gstat')
library('stringr')
ncfiles<-list.files(pattern = ".nc")
data<-nc_open(ncfiles[1])
#sink('ncinfo.txt',split = TRUE)
print(data)#查看nc文件基本信息,并输出保存
#根据数据信息,开始提取对应变量
c_data<-list()
for (i in 1:length(ncfiles)) {data<-nc_open(ncfiles[i])lat<-ncvar_get(data,'latitude')lon<-ncvar_get(data,'longitude')cpf<-ncvar_get(data,'xco2')c_data[[i]]<-data.frame(lon,lat,cpf)
}

此读取的数据长这样:

由于数据是离散网格状,每个nc文件的数据长度不同,lat、lon也不同,这样,我们若要进行批量的计算话,很有必要将其处理成等维度的大小。

数据筛选

该数据为全球范围,我们需要的部分为中国范围,可以根据中国的经纬度范围提取对应的数据,提高运算速率。

#中国经纬度范围:3.86至53.55°N,73.66至135.05°E
#由于数据本身为全球范围离散数据,插值时可直接构造等经纬度格点
#数据分辨率约1.75KM,约为0.0175°,
#由于分辨率过高插值耗时较长,此处插值为0.1°格点,分辨率为10Km
#根据自身需要,修改c_lat与c_lon中seq中的by即可
c_lat=seq(3.86,53.55,0.1)
c_lon=seq(73.66,135.05,0.1)```#从原始数据中筛选出中国地区数据
newdata<-list()
newdate<-list()
idx<-vector(mode="numeric",length=0)
t<-1
for (i in 1:length(c_data)) {d<-c_data[[i]]d1<-subset(d,lon>=73.66&lon<=135.05&lat>=3.86&lat<=53.55,select=c(lon,lat,cpf))if(dim(d1)[1]>0){newdata[[t]]<-d1newdate[[t]]<-mydate[[i]]idx[t]<-it<-t+1}
}

网格构建与空间插值

在插值前,我们需要构建自己需要的网格。
由于我们并不涉及栅格投影转换问题,此处CRS等信息无需考虑。
由于插值后的数据太大,我们也需要把数据重新改成数据框形式。

#空间插值
#构造插值网格点
c_grid <- expand.grid(x=c_lon,y=c_lat)
coordinates(c_grid) <- ~x+y
gridded(c_grid) <- TRUE
#插值,IDW插值inverse distance weighted interpolation
idw_data<-list()
for (i in 1:length(newdata)) {d<-newdata[[i]]c_sp<-SpatialPointsDataFrame(coords = cbind(x =d$lon, y =d$lat),data=d)#将数据转为空间栅格类型idw<-idw(formula =cpf~1,locations = c_sp,newdata=c_grid)idw_output <- as.data.frame(idw)names(idw_output)[1:3]<-c("long","lat","cpf")idw_data[[i]]<-idw_output[,c("long","lat","cpf")]print(i)
}

日期转换

虽然nc文件里有date,但从文件里读取速度较慢,我们根据文件名提取日期,再进行转换。

mydate<-list()
for (i in 1:length(ncfiles)) {chdate<-str_extract(ncfiles[i],"[0-9]{6}")mydate[[i]]<-as.Date(chdate,'%y%m%d')
}

日均转月均

主要需要注意数据转换。
使用lappy和do.call也可以实现,但速度慢,我将其转为matrix,再用apply函数计算。

newdate<-as.Date(unlist(newdate),origin = '1970/1/1')
mon<-month(newdate)
ave_mon<-list()
for (ii in 1:12) {idx<-which(mon==ii)cpf_mon<-array(0,dim = c(length(idx),305158,3))for (j in 1:length(idx)) {cpf_mon[j,,]<-as.matrix(idw_data[[idx[j]]])}ave_mon[[ii]]<-apply(cpf_mon, c(2,3), mean)
}

nc文件导出

#导出为nc文件
coord<-c_grid@coords
y<-ncdim_def('y',units = 'degrees',vals =coord[,2] )
x<-ncdim_def('x',units = 'degrees',vals = coord[,1])
for (i in 1:12) {t<-ncdim_def('time',units = 'months',vals =i)ave_cof<-ncvar_def( name = 'xco2',units = 'ppm', dim = list(x),prec = 'double' )lat<-ncvar_def( name = 'lat',units = 'degrees', dim = list(x),prec = 'double' )lon<-ncvar_def( name = 'lon',units = 'degrees', dim = list(x),prec = 'double' )ncnew <- nc_create(filename =paste('ave_cof/avemon_',as.character(i),'.nc',seq='',collapse = ''),list(ave_cof,lat,lon))ncvar_put(ncnew, varid = ave_cof, vals =ave_mon[[i]][,3] )ncvar_put(ncnew, varid = lat, vals =ave_mon[[i]][,2] )ncvar_put(ncnew, varid = lon, vals =ave_mon[[i]][,1] )nc_close(ncnew)
}


完成。

R语言空间插值/R语言离散数据网格化/R语言空间点插值/R语言nc日均转月均、日期转换相关推荐

  1. R语言merge函数左连接dataframe数据(Left (outer) join in R)、左连接必须将参数all设置(all.x = TRUE)、默认merge函数通过公共列名合并数据集

    R语言merge函数左连接dataframe数据(Left (outer) join in R).merge函数进行左连接必须将参数all设置为(all.x = TRUE).默认merge函数通过公共 ...

  2. c语言如何在文件中间插入数据,急求如何将下列C语言程序数据存储到文件中?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中. #include int ...

  3. python底层是用什么语言实现的_我为何说Python是全栈式开发语言?

    Python 的排名从去年开始就借助人工智能持续上升,如今它已经成为了第一名.但排在前四名的语言 Python.C.Java 和 C++都拥有广大的用户群体,而且他们的用户总量也十分相近.实际上,Di ...

  4. r语言worldclim数据_R语言空间数据分析(五):栅格数据处理

    作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识图谱等,著有& ...

  5. R语言空间数据处理(part1)--基础数据操作与处理

    学习笔记,仅供参考 学习书目:<R语言空间数据处理与分析实践教程>–卢宾宾; 基础数据操作与处理 设置工作路径,并导入包 workL = "F:/MyStudio/Rstudio ...

  6. R语言空间数据处理(part2)--空间数据读写

    学习笔记,仅供参考 学习书目:<R语言空间数据处理与分析实践教程>–卢宾宾; 准备工作 设置工作路径,并导包 workL = "F:/MyStudio/Rstudio/RSpac ...

  7. 利用丁香园数据生成疫情分布地图(R语言)| 博文精选

    来源 | CSDN 博客 作者 | 万里写入胸怀间 责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 疫情牵动大家,除了做好分内工作,管好自己不给社会添乱,也就是只能持续关注 ...

  8. moran指数 r语言_R语言空间数据分析(七):空间自相关

    作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识图谱等,著有& ...

  9. 这个报表工具绝了!能做GIS数据地图,还能集成R语言!

    我们知道报表工具就像是加强版的Excel,主要用途就是制作各种报表.但有一个报表工具,不仅本身很强大,能高效率无重复的制作各种报表,还拥有丰富的可视化,能做数据分析. 最近更是新出了几款插件,能在线预 ...

  10. R语言实战 前三章 统计 数据框 经典画图

    目录 导论 案例1 stat 案例2 packages 第一章 R语言介绍 基本的操作命令 保存图片 第二章 创建数据集 2.1. 合并 2.2. 向量 2.2.1. 赋值 2.2.2. 删除 2.2 ...

最新文章

  1. 阿里巴巴python库_年薪20万阿里巴巴Python工程师面试题曝光
  2. 数据采集框架Gobblin简介
  3. 阅读文献的三大问题:坐不住,记不住,想不开
  4. mysql5.7.25源码安装_源码编译安装 mysql5.7.25
  5. 通过反射创建动态代理对象(三)
  6. AI 质检学习报告——实践篇——第一步:python利用OpenCV打开摄像头并截图
  7. 为什么需要MapReduce?
  8. LAMP环境中如何重新部署一个Yii2.0 web项目
  9. php-fpm 配置文件位置,php
  10. ef core mysql 生成迁移失败_EFCore + MySql codeFirst 迁移 Migration出现的问题
  11. Tomcat Get请求的巨坑
  12. 第六章 数组和索引器 (6.6 索引器)
  13. vue图片压缩不失真_图片压缩会失真?快试试这几个无损压缩神器。
  14. 都2021年了,还不会使用GitHub创建、推送、拉取、克隆远程库、团队协作开发?
  15. php的array_walk,PHP array_walk() 函数详解
  16. argmax() 函数
  17. 利用Python破解WiFi密码
  18. 【网络】Wireshark分析RST消息
  19. AWTK-MVVM 在 STM32H743 上的移植笔记
  20. ollydbg打补丁

热门文章

  1. 微信提现php 该怎么加密,关于php 调用接口 微信云支付 HmacSha256 加密 request_content...
  2. 【声音可视化】语音学软件:praat
  3. 6款支持中文语音识别开源软件的简单使用
  4. 高斯函数及高斯滤波器
  5. 使用matlab时括号附近出现红色波浪线“使用的MATLAB语法可能无效”提示
  6. movielens1M数据处理
  7. vector2Drawable(批量将png图片转换成android使用的矢量图 )
  8. 【Hardware】【天线基础知识】
  9. 带你认识PLC输入的源型与漏型接法
  10. Java的8种基本数据类型