R 新手,我有一个很长的问题:
我有一个 shapefile/地图,我的目标是根据该多边形和与其相邻的每个多边形的属性为该地图中的每个多边形计算某个索引。
我有一个邻接矩阵——我认为它与“一阶皇后邻接权重矩阵”相同,尽管我不确定——它描述了哪些多边形与其他多边形接壤,例如,
POLYID A B C D E
A 0 0 1 0 1
B 0 0 1 0 0
C 1 1 0 1 0
D 0 0 1 0 1
E 1 0 0 1 0
例如,上面表示多边形“C”和“E”与多边形“A”相邻;多边形“B”仅邻接多边形“C”等。
我拥有的属性表每行有一个多边形:
POLYID TOT L10K 10_15K 15_20K ...
A 500 24 30 77 ...
其中 TOT、L10K 等是我用来计算指数的变量。
我的数据中有 525 个多边形/行,所以我想使用邻接矩阵来确定将哪些行的属性合并到感兴趣索引的计算中。现在,当我对与相邻多边形的一个“束”相对应的行进行子集化时,我可以计算索引,然后使用循环(如果感兴趣,我正在计算百分位差距指数,一种衡量当地收入隔离的方法)。例如,子集底特律市学校的“社区”:
Detroit <- UNSD00[c(142,150,164,221,226,236,295,327,157,177,178,364,233,373,418,424,449,451,487),]
然后记录边缘列的比例和运行总计:
catprops <- vector()
for(i in 4:19)
{
catprops[(i-3)]<-sum(Detroit[,i])/sum(Detroit[,3])
}
catprops <- as.data.frame(catprops)
catprops[,2]<-cumsum(catprops[,1])
列 4:19 是属性表中的必要列。
然后我使用下面的代码来计算索引——注意循环有“i in 1:19”,因为底特律子集有 19 个多边形。
cgidistsum <- 0
for(i in 1:19)
{
pranks <- vector()
for(j in 4:19)
{
if (Detroit[i,j]==0)
pranks <- append(pranks,0)
else if (j == 4)
pranks <- append(pranks,seq(0,catprops[1,2],by=catprops[1,2]/Detroit[i,j]))
else
pranks <- append(pranks,seq(catprops[j-4,2],catprops[j-3,2],by=catprops[j-3,1]/Detroit[i,j]))
}
distpranks <- vector()
distpranks<-abs(pranks-median(pranks))
cgidistsum <- cgidistsum + sum(distpranks)
}
cgi <- (.25-(cgidistsum/sum(Detroit[,3])))/.25
如果我提供了不必要的信息,我深表歉意。我真的很想利用邻接矩阵来计算这些行的每个“捆绑”的 CGI。
如果你碰巧知道我是怎么开始的,那就太好了。
对于任何新手错误,我深表歉意,我是 R 新手!
编辑:
我已经想出了如何解决这个问题,但是为了清楚问题并回答评论中提出的一个问题,让我说一个多边形的邻域是它自己和它相邻的每个多边形的联合。在我上面给出的示例中,对于多边形“A”,这将是多边形“A”、“C”和“E”的并集