2017-06-21 14 views
1

igraphオブジェクトの各頂点のポストコードがあります。私はこれらをggmapを使って地理座標に変換したいので、edge属性=地理的距離を計算することができます。結果はlatlonのリストは、すべての頂点の座標れggmapを使用したigraph頂点属性のジオコーディング

V(g)$coordinate <- geocode(V(g)$postcode, sensor = FALSE, 
          output = "latlon", source = "google") 

は各頂点ではなく、それぞれにユニークなlatlonに対して繰り返さ:

require(igraph) 
require(ggmap) 

g <- graph.ring(6) 
V(grph)$postcode <- c("Johannesburg 2017", 
         "Rondebosch 8000", 
         "Durban 4001", 
         "Pietermaritzburg 3201", 
         "Jeffreys Bay 6330", 
         "Pretoria 0001") 

は、私は各頂点の地理座標をこのように生成することができると思いました頂点。

head(head(V(g)$coordinate) 
[[1]] 
[1] 28.03837 28.31993 31.02204 30.36661 24.91015 28.18540 

[[2]] 
[1] -26.18825 -25.84222 -29.84962 -29.65119 -34.05067 -25.74895 

[[3]] 
[1] 28.03837 28.31993 31.02204 30.36661 24.91015 28.18540 

[[4]] 
[1] -26.18825 -25.84222 -29.84962 -29.65119 -34.05067 -25.74895 

[[5]] 
[1] 28.03837 28.31993 31.02204 30.36661 24.91015 28.18540 

[[6]] 
[1] -26.18825 -25.84222 -29.84962 -29.65119 -34.05067 -25.74895 

-ve番号=緯度、経度+ =番号まし。私は間違って何をしていますか?

+0

ジオコードでは、各郵便番号のタプルのリストを作成します。各タプルには緯度と経度の値が含まれています。 – user2995175

答えて

1

geocodeはデータフレームを返しますが、V(g)$coordinateに割り当てると、それをリストとして扱い、各頂点の値を取得するために列をリサイクルします。

postcode_df <- geocode(V(g)$postcode, sensor = FALSE, 
          output = "latlon", source = "google") 

postcode_df 
#  lon  lat 
# 1 28.03837 -26.18825 
# 2 28.31993 -25.84222 
# 3 31.02204 -29.84962 
# 4 30.36661 -29.65119 
# 5 24.91015 -34.05067 
# 6 28.18540 -25.74895 

データフレームの各行を頂点に割り当てることができる要素にする必要があります。

V(g)$coordinate <- split(postcode_df, 1:nrow(postcode_df)) 

V(g)$coordinate 
# [[1]] 
# lon  lat 
# 1 28.03837 -26.18825 
# 
# [[2]] 
# lon  lat 
# 2 28.31993 -25.84222 
# 
# [[3]] 
# lon  lat 
# 3 31.02204 -29.84962 
# 
# [[4]] 
# lon  lat 
# 4 30.36661 -29.65119 
# 
# [[5]] 
# lon  lat 
# 5 24.91015 -34.05067 
# 
# [[6]] 
# lon  lat 
# 6 28.1854 -25.74895 
関連する問題