CSVデータをシェープファイルに結合する | R, GIS
この記事では、Rで、CSVデータをシェープファイルに結合する方法について説明します。
記事の概要です。
まず、シェープファイルとCSVファイルを読み込みます。
次に、dplyrのleft_joinを使って両者を結合します。
シェープファイルとCSVファイルで結合に使うカラムの名前が異なるため、left_joinのby引数には名前付きベクトルを渡します。
left_join(shp, d, by = c("N03_004" = "市区町村"))
プログラム全体を示します。
## シェープファイル読み込み
library(sf)
shp <- st_read("./data/N03-20150101_08_GML", options = "ENCODING=SHIFT-JIS")
## CSVファイル読み込み
d <- read.csv("./data/kekkahyo1_ibaraki_2015-2045.csv")
## 結合
library(dplyr)
shpCsv <- left_join(shp, d, by = c("N03_004" = "市区町村"))
## 確認
head(shpCsv)
この記事で使用したRとパッケージのバージョンを記載しておきます。
R 3.6.1
sf 0.7-6
dplyr 0.8.3
CSVデータをシェープファイルに結合する
まず、シェープファイルとCSVファイルを読み込みます。
もしシェープファイルが無ければ、こちらを参考にダウンロードして下さい。
CSVデータは、こちらからダウンロードできます。
## シェープファイル読み込み
library(sf)
shp <- st_read("./data/N03-20150101_08_GML", options = "ENCODING=SHIFT-JIS")
## CSVファイル読み込み
d <- read.csv("./data/kekkahyo1_ibaraki_2015-2045.csv")
では、両者を結合します。
結合に使うカラムは市町村名のカラムです。
市町村名のカラムは、シェープファイルでは「N03_004」、CSVファイルでは「市区町村」という名前になっており、両者で異なります。
そのため、名前付きベクトルを使って以下のように結合します。
## 結合
library(dplyr)
shpCsv <- left_join(shp, d, by = c("N03_004" = "市区町村"))
もし、CSVファイルでも市町村名のカラム名がシェープファイルと同じ「N03_004」だった場合、結合は以下のようになります。
## 結合に使うカラム名が同じ(N03_004)場合
library(dplyr)
shpCsv <- left_join(shp, d, by = c("N03_004"))
では、結合したデータを確認します。
## 確認
head(shpCsv)
Simple feature collection with 6 features and 14 fields
geometry type: POLYGON
dimension: XY
bbox: xmin: 140.3217 ymin: 36.30072 xmax: 140.639 ymax: 36.50865
epsg (SRID): NA
proj4string: +proj=longlat +ellps=GRS80 +no_defs
N03_001 N03_002 N03_003 N03_004 N03_007 コード 都道府県 cy2015 cy2020 cy2025
1 茨城県 2 水戸市 08201 8201 茨城県 100 100.0 99.0
2 茨城県 1 日立市 08202 8202 茨城県 100 95.2 89.4
3 茨城県 1 日立市 08202 8202 茨城県 100 95.2 89.4
4 茨城県 1 日立市 08202 8202 茨城県 100 95.2 89.4
5 茨城県 1 日立市 08202 8202 茨城県 100 95.2 89.4
6 茨城県 1 日立市 08202 8202 茨城県 100 95.2 89.4
cy2030 cy2035 cy2040 cy2045 geometry
1 97.2 94.8 91.8 88.3 POLYGON ((140.3894 36.46392...
2 83.0 76.4 69.8 63.4 POLYGON ((140.6364 36.47452...
3 83.0 76.4 69.8 63.4 POLYGON ((140.6301 36.48646...
4 83.0 76.4 69.8 63.4 POLYGON ((140.6305 36.49491...
5 83.0 76.4 69.8 63.4 POLYGON ((140.6388 36.49908...
6 83.0 76.4 69.8 63.4 POLYGON ((140.6353 36.50807...
「コード」から「cy2045」までのカラムがCSVデータです。
結合は特に問題なく行われたようです。
今回は以上です。
おわりに
お疲れさまでした。
結合に関しては、QGISとRで大きな差は感じませんでしたが、いかがでしょうか?
次回は、今回結合したデータを使い、数値に基づく地図の色分けを行ないます。