R语言空间插值/R语言离散数据网格化/R语言空间点插值/R语言nc日均转月均、日期转换
在我们日常使用数据时,我们获取的数据并不是连续的网格,而是网格状的离散数据。
这时,我们就需要利用拥有的离散网格数据,自定义将其插值。
通常插值我们需要shp文件给予边界,不过,只要知道了所需区域的经纬度范围,我们可以自行构建网格将点数据插值在自己定义的经纬度范围中。
本文包含:
- nc文件批量读取
- 构造网格点,空间插画
- 从字符串中提取日期,并转换
- 日均转月均
- 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日均转月均、日期转换相关推荐
- 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函数通过公共 ...
- c语言如何在文件中间插入数据,急求如何将下列C语言程序数据存储到文件中?...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中. #include int ...
- python底层是用什么语言实现的_我为何说Python是全栈式开发语言?
Python 的排名从去年开始就借助人工智能持续上升,如今它已经成为了第一名.但排在前四名的语言 Python.C.Java 和 C++都拥有广大的用户群体,而且他们的用户总量也十分相近.实际上,Di ...
- r语言worldclim数据_R语言空间数据分析(五):栅格数据处理
作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识图谱等,著有& ...
- R语言空间数据处理(part1)--基础数据操作与处理
学习笔记,仅供参考 学习书目:<R语言空间数据处理与分析实践教程>–卢宾宾; 基础数据操作与处理 设置工作路径,并导入包 workL = "F:/MyStudio/Rstudio ...
- R语言空间数据处理(part2)--空间数据读写
学习笔记,仅供参考 学习书目:<R语言空间数据处理与分析实践教程>–卢宾宾; 准备工作 设置工作路径,并导包 workL = "F:/MyStudio/Rstudio/RSpac ...
- 利用丁香园数据生成疫情分布地图(R语言)| 博文精选
来源 | CSDN 博客 作者 | 万里写入胸怀间 责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 疫情牵动大家,除了做好分内工作,管好自己不给社会添乱,也就是只能持续关注 ...
- moran指数 r语言_R语言空间数据分析(七):空间自相关
作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识图谱等,著有& ...
- 这个报表工具绝了!能做GIS数据地图,还能集成R语言!
我们知道报表工具就像是加强版的Excel,主要用途就是制作各种报表.但有一个报表工具,不仅本身很强大,能高效率无重复的制作各种报表,还拥有丰富的可视化,能做数据分析. 最近更是新出了几款插件,能在线预 ...
- R语言实战 前三章 统计 数据框 经典画图
目录 导论 案例1 stat 案例2 packages 第一章 R语言介绍 基本的操作命令 保存图片 第二章 创建数据集 2.1. 合并 2.2. 向量 2.2.1. 赋值 2.2.2. 删除 2.2 ...
最新文章
- 阿里巴巴python库_年薪20万阿里巴巴Python工程师面试题曝光
- 数据采集框架Gobblin简介
- 阅读文献的三大问题:坐不住,记不住,想不开
- mysql5.7.25源码安装_源码编译安装 mysql5.7.25
- 通过反射创建动态代理对象(三)
- AI 质检学习报告——实践篇——第一步:python利用OpenCV打开摄像头并截图
- 为什么需要MapReduce?
- LAMP环境中如何重新部署一个Yii2.0 web项目
- php-fpm 配置文件位置,php
- ef core mysql 生成迁移失败_EFCore + MySql codeFirst 迁移 Migration出现的问题
- Tomcat Get请求的巨坑
- 第六章 数组和索引器 (6.6 索引器)
- vue图片压缩不失真_图片压缩会失真?快试试这几个无损压缩神器。
- 都2021年了,还不会使用GitHub创建、推送、拉取、克隆远程库、团队协作开发?
- php的array_walk,PHP array_walk() 函数详解
- argmax() 函数
- 利用Python破解WiFi密码
- 【网络】Wireshark分析RST消息
- AWTK-MVVM 在 STM32H743 上的移植笔记
- ollydbg打补丁
热门文章
- 微信提现php 该怎么加密,关于php 调用接口 微信云支付 HmacSha256 加密 request_content...
- 【声音可视化】语音学软件:praat
- 6款支持中文语音识别开源软件的简单使用
- 高斯函数及高斯滤波器
- 使用matlab时括号附近出现红色波浪线“使用的MATLAB语法可能无效”提示
- movielens1M数据处理
- vector2Drawable(批量将png图片转换成android使用的矢量图 )
- 【Hardware】【天线基础知识】
- 带你认识PLC输入的源型与漏型接法
- Java的8种基本数据类型