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で大きな差は感じませんでしたが、いかがでしょうか?
次回は、今回結合したデータを使い、数値に基づく地図の色分けを行ないます。

この記事が気に入ったらサポートをしてみませんか?