Rで地域メッシュコードから緯度経度をまとめて取得
久しぶりの更新です。地域メッシュコードが膨大に入っているCSVファイルから、それぞれメッシュ中心の緯度経度に変換したいと思いました。Rのjpmeshパッケージで変換は可能とわかりました(作成者の方、どうもありがとうございます!)。
標準地域メッシュを扱うRパッケージを更新しました: jpmesh v.1.0.0 - cucumber flesh
作業内容は知っている人にとっては当たり前のことなのですが、初心者には悩むところがあったので、アップしておきます。(パッケージの中身よりも、Rを扱う私の知識不足による問題ですね!)
Rはversion4.2.2を使いました。library(jpmesh)の読み込みまでは割愛させていただきます。まずは地域メッシュ(メッシュコード)の含まれているCSVファイルの読み込みです。
> d<-read.csv(file.choose(),header=T)
と入力するとファイルを選択できます。header=Tは、第1行はヘッダであると指定するためのものです。読み込んだデータの確認をするのに膨大な行数が含まれている場合はhead関数を使うと最初のほうだけ確認できます。このデータはメッシュごとに動物の確認回数が含まれているもので、Numberの列がその回数です。
> head(d)
Mesh Number
1 362335 2
2 362336 3
3 362337 2
4 362345 2
5 362346 4
6 362347 3
このうち、1列目のメッシュコードだけを処理すればよいので、1列目のデータのみを抽出します。このデータセットはd2にします。headで中身を念のため確認しておきます。
> d2<-d$Mesh
> head(d2)
[1] 362335 362336 362337 362345 362346 362347
ここでjpmeshパッケージの関数mesh_to_coordsを使います。メッシュから緯度経度に変換してくれる関数です。
> d3<-mesh_to_coords(d2)
> head(d3)
# A tibble: 6 × 5
meshcode lng_center lat_center lng_error lat_error
<meshcode> <dbl> <dbl> <dbl> <dbl>
1 362335 124. 24.3 0.0625 0.0417
2 362336 124. 24.3 0.0625 0.0417
3 362337 124. 24.3 0.0625 0.0417
4 362345 124. 24.4 0.0625 0.0417
5 362346 124. 24.4 0.0625 0.0417
6 362347 124. 24.4 0.0625 0.0417
中身は上記のようになっています。 lng_center のところにある「124.」というのがメッシュ中心の経度、lat_center のところにある「24.3」というのがメッシュ中心の緯度です。そのあとはそれぞれの誤差のようですが、今回は緯度経度の値のみで処理しました。上記のようになっているので、たとえば経度の小数点以下はどこに出てくるのかしばらく悩んでいました。あとでCSVに書き出したらきちんと小数点以下のデータも含まれていました。折りたたまれているだけなのでした!たとえば、d4というデータセットでd3のうち「lng_center」つまり経度の中心だけ抽出してみます。
> d4<-d3$lng_center
> head(d4)
[1] 123.6875 123.8125 123.9375 123.6875 123.8125 123.9375
上記のようにちゃんとそれぞれ変換されていました。抽出したデータをまとめてCSVファイルに出力します。
> write.csv(x = d4, file = "exportdata.csv")
このようにするとexportdata.csvというファイル名でデータセットd4が保存されます。
2列まとめてのときは
>d4<-data.frame(x=d3$lng_center,y=d3$lat_center)
>write.csv(d4, file = "exportdata.csv")
とします。
保存先は作業しているディレクトリなのですが、どこだかよくわからない場合はまずは上記のように保存してしまい、あとで次のように入力すると場所がわかります。
> getwd()
[1] "C:/Users/ここにユーザー名など/Documents"
下記のように無事、CSVファイルができました。