R在读取shp时候,处理,或者画图都会碰到,反应迟钝问题。所以,我们有时候会根据需要,将shp文件转成raster,不仅可视化快,还可方便数据处理与提取。shp文件转成raster主要解决以下问题:
下面就来介绍,如何根据shp文件,转成raster及在转换过程中碰到的一些问题。
利用 raster 包自带的数据进行演示。读取的是 SpatialPolygonsDataFrame ,关于如何读取shp文件,可以用rgdal与sf的命令。
关键是 rasterize, rasterize(shape, r, 1) 里面有三个主要参数:
那如果我们需要根据shp里面的地区数来生成不同的value呢,意思就是,不用地区value不一样,不应该是统一值。
有时候生成的raster里面有NA数据,那么如何替换掉呢,(reclassify)[ http://search.r-project.org/library/raster/html/reclassify.html] 可以实现该过程。主要参数cbind(0,a,b)意思是将0-a的数值全部变成b。
具体参见: ?reclassify
下面我么将NA替换成0,或者,value=12的替换成100.
转换成raster最终目的是实现数据的提取。譬如现在有两个点,如何提取对应点上的value。
如果是shp文件,操作比较麻烦点,又是还会提取出NA。转换Raster以后,就更方便了。
上面的图太模糊了,那我们设置res就好。
res精度提高,运行速度会下降,尤其是遇到很大的shp数据时候。
一般R里面加载shp超过50M,系统就会迟钝。
rasterize 里面还可以设置field=1.可以达到同样效果。
假设有两组栅格数据,一组代表2019年中国每月降雨量,一组代表2019年中国每月植被叶面积指数(LAI)。想要得到中国月降水量与LAI的相关性分布,那么需要对两组栅格数据对应的栅格点进行逐栅格的相关性分析。
将降水数据导入栅格栈中,这个过程可以理解为将降水数据按时间顺序从上到下堆叠。同理,按相同的时间顺序将LAI数据堆叠。值得一提的是,stack()函数在堆叠栅格数据时是按文件名拼音和数字大小顺序自动堆叠的,具体规则可以亲自尝试。最后,将这两个栅格栈合并成一个。
对相关性分析函数稍作改变。
以上方法是可以推广的,线性回归函数lm()和相关性分析函数cor()的输入都可以是向量,因此只要函数支持向量输入,理论上讲都可以类比上述过程实现。但是如果函数只支持数据框输入,如gbm包中的函数gbm(),那就只能另辟蹊径了。
在R语言里面,有很多读取数据的方法。R能读文本文件,csv格式文件,通过RODBC包读取数据库数据等等。下面我介绍几种最基本的读取数据的方法!工具/原料
RStudio
方法
不管是读取数据还是写入,R都是在工作路径中完成的。所以首先我们要知道我们的R所在的工作路径是在哪里。使用getwd()函数来获取我们的工作路径。
下面查看工作路径里面有哪些文件,使用dir()函数
如果你所想导入的数据并不在你当前的工作路径中,有两种方法可以解决。第一种就是把数据文件放到工作路径中,第二种方法就是更改工作路径。更改工作路径使用setwd()函数。比如你想要把工作路径设置成桌面
现在我读取我工作路径中,名字为hw1_data.csv的文件。使用read.csv()函数
也可以使用read.table()函数来读取csv格式的文件。由于csv文件的分隔符是“,”所以我们在用read.table()函数的时候,sep参数,我们要设定为sep=“,”
发现read.table()读出来的数据,列名并不是我们文件中的列名,而是V1,V2。。。我们需要加上header这个参数来修改这个问题
另外在read.table()函数族中还有很多参数,对我们读取数据都有帮助,大家可以去了解下。使用?read.table()进行了解