作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言高效数据处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。HopeR:R语言空间数据分析(零):总目录​zhuanlan.zhihu.com

本帖子会简单介绍如何读入并处理栅格数据。首先,我们会用到一个矢量数据,数据来自:https://gadm.org/download_country_v3.html,用到的是澳洲的地图。读取方法如下:

# 获得数据的方法之一

# wget --no-check-certificate https://biogeo.ucdavis.edu/data/gadm3.6/gpkg/gadm36_AUS_gpkg.zip

library(pacman)

p_load(sf,raster,tidyverse)

# 查看有哪些图层

st_layers(

"data/gadm36_AUS.gpkg"

)

# 读取特定图层

Ausoutline

layer='gadm36_AUS_0')

可以对这个数据集进行观察:

# 观察

print(Ausoutline)

# 查看proj4坐标系

st_crs(Ausoutline)$proj4string

plot(Ausoutline)

然后,让我们读入栅格数据,这是一个全球平均气温数据,来源于:Historical climate data(tavg 5m)。

# 读入栅格数据

jan

# have a look at the raster layer jan

jan

plot(jan)

我们可以改变它的坐标系,然后再次绘图:

# set the proj 4 to a new object

newproj

# get the jan raster and give it the new proj4

pr1 %

projectRaster(., crs=newproj)

plot(pr1)

下面,让我们一次性读入所有栅格数据:

# 一次性读入所有栅格数据

dir("data/wc2.1_5m_tavg",full.names = T) %>%

stack() -> worldclimtemp

worldclimtemp

让我们为每一个图层命名,它其实是每个月的平均温度,因此可以用月份命名:

month

"Jul", "Aug", "Sep", "Oct", "Nov", "Dec")

names(worldclimtemp)

如果想取出一月份的数据,有两种方法:

worldclimtemp[[1]]

worldclimtemp$Jan

下面,让我们提取特定城市的数据,这是通过经纬度来提取的:

## 提取特定城市的数据

site

"Bunbury", "Cairns", "Adelaide", "Gold Coast", "Canberra", "Newcastle",

"Wollongong", "Logan City" )

lon

138.6, 153.43, 149.13, 151.78, 150.89, 153.12)

lat

-34.93, -28, -35.28, -32.93, -34.42, -27.64)

#Put all of this inforamtion into one list

samples

samples

# Extract the data from the Rasterstack for all points

AUcitytemp" />

提取的变量是一个矩阵,可以稍微进行转化,把城市名称也加上。

AUcitytemp

Aucitytemp2 %

as_tibble()%>%

add_column(Site = site, .before = "Jan")

Aucitytemp2

现在,我们要从世界气温图中取出澳洲的部分,实现如下(利用crop函数):

Austemp %

# now crop our temp data to the extent

crop(worldclimtemp,.)

# plot the output

plot(Austemp)

这个图中还包括了非澳洲的部分,如果只想要澳洲的部分,可以这样操作:

exactAus %

mask(Ausoutline, na.rm=TRUE)

plot(exactAus)

可以尝试对三月份的数据做一个温度分布直方图:

exactAusdf %

as.data.frame()

# set up the basic histogram

gghist

aes(x=Mar)) +

geom_histogram(color="black",

fill="white")+

labs(title="Ggplot2 histogram of Australian March temperatures",

x="Temperature",

y="Frequency")

# add a vertical line to the hisogram showing mean tempearture

gghist + geom_vline(aes(xintercept=mean(Mar,

na.rm=TRUE)),

color="blue",

linetype="dashed",

size=1)+

theme(plot.title = element_text(hjust = 0.5))

最后,我们会演示一下空间插值的过程。首先,我们来合并气温的时空分布数据:

samplestemp%

cbind(samples)

samplestemp

而后,让我们把它转换为空间信息数据框,这里需要声明经纬所在列,以及坐标系(这里定义为4326,也就是WGS 84):

samplestemp%

st_as_sf(.,coords = c("lon", "lat"),

crs =4326,

agr = "constant")

samplestemp

这里我们可以对澳大利亚轮廓图和城市分布进行可视化:

plot(Ausoutline$geom)

plot(st_geometry(samplestemp), add=TRUE)

插值之前,让我们先统一坐标系,然后转换为SP对象:

samplestemp %

st_transform(3112)

Ausoutline %

st_transform(3112)

samplestempSP %

as(., 'Spatial')

AusoutlineSP %

as(., 'Spatial')

现在意味着,我们要用手头若干个城市的数值,来对整个澳大利亚的气温空间分布进行插值。我们需要创建一个要插值的空间范围:

emptygrd

names(emptygrd)

coordinates(emptygrd)

gridded(emptygrd)

fullgrid(emptygrd)

# Add the projection to the grid

proj4string(emptygrd)

然后进行插值:

p_load(gstat)

# Interpolate the grid cells using a power value of 2

interpolate

这里用的IDW算法来插值,只使用1月份的数据。idp参数越大,则随着距离的增大,数值减少越大。如果idp为0,那么随着距离加大,依然不会有任何数值衰减。关于方法细节,可参考:How inverse distance weighted interpolation works。最后,我们看一下插值之后的结果:

# Convert output to raster object

ras

# Clip the raster to Australia outline

rasmask

# Plot the raster

plot(rasmask)

参考资料:

r语言worldclim数据_R语言空间数据分析(五):栅格数据处理相关推荐

  1. mysql设置语言变量_Mysql语言之数据操作语言

    DML语言:数据操作语言 插入:insert 修改:update 删除:delete 一.插入语句: /* 语法: insert into 表名(列名...) values(值1,...); */ # ...

  2. r语言 list添加_R语言里面双层list变成长形数据框

    绘图需求最大的难关往往是数据整理,比如下面的双层list : set.seed(123456)gs=list(tmp1=list(g1=sample(1000,abs(floor(100*rnorm( ...

  3. r语言中mpg数据_R语言数据筛选整理包dplyr

    dplyr软件包是R中功能最强大,最受欢迎的软件包之一.该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等.本文包括一些示例和如何 ...

  4. r语言清除变量_R语言(1)初识与数据结构

    点击上方蓝字,记得关注我们! a picture is worth a thousand words! 一,R语言简介 1,R语言的发展 上世纪90年代初,新西兰奥克兰大学 Ross Ihaka 和 ...

  5. r语言electricity数据集_R语言实战学习

    <R语言实战>中文电子版 提取码:lx35 已经学习打卡R语言22天了,可以说是初窥真容--基本了解R的数据和函数:作为程序语言,就是要多练习,多领悟,在实战中发现问题并解决问题. 所以, ...

  6. r语言折线图_R语言基础入门视频教程——语法篇(完结)

    这个视频分了2个阶段录制的,第1阶段有10章的内容,在文章:生物专业学生0基础入门R语言语法视频教程,就有说明,后面把最后2章补录完成啦,也算是一个结局啦.下面是目录: 第01章:R语言简介(免费) ...

  7. r - 求平均成绩_R语言 从零开始的笔记(一)

    R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. R语言于生物学分析中的应用越来越广泛,在其他领域的统计绘图应用 ...

  8. R语言JAVA对比_R语言统计分析应用与SAS、SPSS的比较

    能够用来做统计分析的软件和程序很多,目前应用比较广泛的包括:SPSS, SAS.R语言,Matlab,S-PLUS,S-Miner等.下面我们来看一下各应用的特点: SPSS: 最简单的,都是菜单操作 ...

  9. sql语言学习——数据定义语言

    数据定义语言:库和表的管理. 库的管理:创建.修改.删除 表的管理:创建.修改.删除 创建:create 修改:alter 删除:drop 查看表的结构:DESC 表名; 查看库中的表:SHOW TA ...

最新文章

  1. Debian/Ubuntu/Raspbian 时间同步
  2. ios微信支付失败 php,iOS 微信支付疑难杂症。
  3. 微擎css使用php变量,$_Wamp;全局变量
  4. EventFlow.helper.js 事件流程控制
  5. 【渝粤教育】 国家开放大学2020年春季 1079高等代数专题研究 参考试题
  6. 教你一招:让集群慢节点无处可藏
  7. RVC使用指南(二)-集群管理
  8. NotePad++ 调试PHP代码中文显示乱码
  9. UDS - 诊断协议和协议栈介绍
  10. linux 执行文件命令
  11. 第十一届 蓝桥杯 省 模拟赛 试题+题解 C/C++描述
  12. 互联网+对酒店IPTV电视系统的影响
  13. 无人机倾斜摄影测量技术有哪些特点?
  14. 史上最强最逼真的游戏
  15. 八数码 问题 BFS+Cantor
  16. Linux系统怎么复制文件夹下的全部文件到另外文件夹?
  17. React-Redux使用方法
  18. 【Puppeteer】基于Puppeteer采集网页图片资源
  19. 玩转树莓派---详解树莓派的系统烧录,基础使用及基于树莓派制作手势控制的小车(附详细代码及演示效果)
  20. 面试官问你:“什么是NoSQL“

热门文章

  1. 实体摘要系统的解释性评测
  2. 作者:张坦(1989-),女,西安交通大学管理学院信息系统系博士生
  3. 作者:熊赟,复旦大学计算机科学技术学院副教授。
  4. 【2016年第2期】大数据背景下的治理现代化:何以可能与何以可为(下)
  5. 【计算机网络】分组交换网中的时延,丢包和吞吐量
  6. 【高等数学】高等数学基础理论归纳
  7. 【计算机科学基础】数据运算
  8. 【面向对象】实现继承的正确实践和不当实践
  9. 【软件架构】软件架构设计常用概念、原则与思想
  10. 【数据结构与算法】广义表的储存结构和结点定义的Java实现