2016-09-06 78 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