workshopofsdar的个人博客分享 http://blog.sciencenet.cn/u/workshopofsdar

博文

gal2mat:将gal权重文件转成n-by-n矩阵

已有 6495 次阅读 2018-5-19 07:59 |个人分类:区域经济研究|系统分类:科研笔记| 空间权重矩阵, GeoDa, gal文件

 

 

一、gal格式文件

GeoDa 生成的gal权重文件为文本格式,可用“记事本”打开。如下图所示的描述中国31个大陆省份邻近情况的文件内容,其第一行为文件头说明,表示有31个单元,基于shape文件Province31生成,识别单元的变量为POLY_ID。第2行表示POLY_ID编号为1的单元有2个邻居,它们的编号在第3行给出,分别为1519;第4行和第5行给出编号为2的邻居信息,余者类推。需要说明的是,海南(编号为20)没有邻居,因此其邻居数为0,下面一行为空。

 

二、R语言程序gal2mat

利用R语言包spdep包中的nb2mat,可以将gal文件转成n*n矩阵。nb2mat默认为行标准化。如果有单元无邻居,需要将zero.policy设为TRUE

现自编R语言程序gal2mat()gal文件转成n*n矩阵,其参数设定如下:

gal2mat(gal, row.st = TRUE)

其中,gal为文件路径,row.st设定要不要行标准化,默认为TRUE

注:你会发现,如果有单元无邻居,这会带来一些问题。如何解决?且听下回分解。

代码

#设置为自己的工作文件夹

> setwd("…\\gal2mat")

# nb2matgal文件转成矩阵

> library(spdep)

> mynb <-   read.gal("province31.gal")

> spmat1 <- nb2mat(mynb,   zero.policy=TRUE)

#用自编函数将gal文件转成矩阵

#载入函数gal2mat

> source("gal2mat.R")

> spmat2 <-   gal2mat("province31.gal")

Read 198 items

Warning messages:

1: In gal2mat("province31.gal") :   Unit 20 has no neighbor.

2: In FUN(newX[, i], ...) : The sum of row is   0.

#比较spmat1spmat2是否一致,结果显示为一致

> all(spmat1 == spmat2)

[1] TRUE

#写出n*n空间权重矩阵

> write.csv(spmat2, "spmat.csv")

 

数据和代码下载请关注微信公众号:思达区域经济研究方法SDAR-workshop

 

扫码或长按,关注该微信号

版权申明

本号所有图文资料,除特别说明外,其版权归浙江工业大学王庆喜领衔的“思达工作室”所有。转发、引用请注明原始出处。

网络链接

1、科学网博客:http://blog.sciencenet.cn/u/workshopofsdar

2、网易博客:http://wqx1976.blog.163.com/

3、人大经济论坛账号:R语言区域经济

4、知乎账号:sdar




https://blog.sciencenet.cn/blog-3376208-1114717.html

上一篇:EG指数:从繁琐到简单
下一篇:gwt2mat:将gwt权重文件转成n-by-n矩阵
收藏 IP: 112.10.107.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-22 17:36

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部