从大型数据帧的切片中创建一个向量

时间:2017-12-07 17:51:11

标签: r gis

我有一个大的数据帧df,其元素是zipcodes和相关的shapefile。

领土领域df $ V2,大约有150个地区。

对于这些地区中的每一个,我运行gTouches来创建相关邮政编码的邻接矩阵。我最终想要的是一个包含2个字段的列表 - 地域名称(字符)和邻接矩阵(矩阵) - 这个矩阵将是一个方形矩阵,但每个元素的大小不同。此列表将包含150个元素(每个区域1个)。

我的代码看起来像这样(我道歉这绝对令人尴尬,但我是新手):

Adjacency_Matrices<-list()
for(i in 1:length(unique(as.character(df@data$V2))))
{Adjacency_Matrices[[i]][1]<-unique(as.character(df@data$V2))[i] 
Adjacency_Matrices[[i]][2]<-
gTouches(df[df@data$V2==unique(as.character(df@data$V2))[i],], byid=TRUE)}

因此第1行循环遍历我的唯一地区列表的长度。第2行定义列表的第一个字段(字符串)。第3/4行定义了字符串的第二个字段(gTouches输出是一个方形矩阵)。

我得到两个不同的错误:

1)要替换的项目数量不是替换长度的倍数

2)Adjacency_Matrices [[1]]出错:下标超出范围

我一遍又一遍地用Google搜索,似乎找不到解决这个问题的方法。数字2我认为是关于如何在R中实例化列表的问题。

如果您需要任何澄清,我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

原来我是在思考这个。

在定义i之前,你无法定义Adjacency_Matrices [[i]] [1]。

我需要的只是尝试定义Adjacency_Matrices [[i]] [1]然后分别定义Adjacency_Matrices [[i]] [2]我只需要使用list()来定义我的输出列表。

Adjacency_Matrices<-list(
for(i in 1:length(unique(as.character(df@data$V2))))
{Adjacency_Matrices[[i]]<-list(unique(as.character(df@data$V2))[i], 
gTouches(df[df@data$V2==unique(as.character(df@data$V2))[i],], byid=TRUE))}