2016-09-06 131 views
0

我发现自己的data.frame包含一列列表。在这些列表中是多边形的坐标;其余的列是多边形的特征。展开列表的data.frame列

我想“展开”列表中的坐标点,以便我可以使用ggplot2绘制多边形并制作地图,但无法解决如何执行此操作。

我不太了解列表的结构,它们都是不同的大小,因为多边形有不同的形状。

该数据本来是一个json文件。我jsonlite包拉它,然后试图熬下来的相关组件,如下所示:

library(jsonlite)

json_file <- "https://raw.githubusercontent.com/OpenOil-UG/concessionsmap/master/concessions/data/NG_contracts%2B.geojson" json_data <- jsonlite::fromJSON(json_file, simplifyDataFrame=T) data <- json_data$features data2 <- flatten(data)

这可能不是先从JSON文件正确的方法。对我来说,就像从json获取数据到我能理解的数据框架那样,这似乎是最直接的。

*编辑,包括真实数据,而不是样品

+1

不知道你在问什么。 Base R已经有了一个绘制多边形的函数,记录在'?polygon'上。像'x = a [[1]] [,, 1]; y = a [[1]] [,, 2]; plot(NULL,xlim = range(x),y​​lim = range(y));多边形(x,y,col =“blue”)' – Frank

+0

你是如何结束这样的数据结构的?你似乎有一个三维数组。如果你包含某种[可重现的示例],这将有所帮助(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。目前还不清楚你提供的是一行数据框。为您的示例输入提供所需的输出。 – MrFlick

回答

2

我想[...]使用GGPLOT2绘制多边形和创建地图

一个选项:

library(geojsonio) 
library(ggplot2) 
download.file(json_file, tf <- tempfile(fileext = ".geojson")) 
df <- fortify(geojson_read(tf, what="sp")) 
ggplot(df, aes(long, lat, group=group)) + 
    geom_polygon(color="white") 

这就给了你:

enter image description here

+0

这真的很棒,可以绘制,但它除了坐标之外还会失去原始.json中的所有其他属性;有没有办法保持这些,或让他们在一个不同的data.frame链接回一个id变量? – moman822

+1

'spdf < - geojson_read(tf,what =“sp”); df < - fortify(spdf); df < - merge(df,spdf,by.x =“id”,by.y =“row.names” )'? – lukeA

+0

是的,非常非常感谢! – moman822