データが一致するかの確認
data スロットに無理やりデータを入れてもうまくいかないのは、行と空間オブジェクトの正しい対応関係が失われてしまうからです。では、所得データをポリゴンデータにどう追加すればよいでしょうか? そのために用意されているのが sp の merge() 関数です。
merge() をデータフレームで見たことがあるかもしれません。sp::merge() もほぼ同じ構造ですが、Spatial*** オブジェクトとデータフレームを渡すと、新しい Spatial*** オブジェクトを返します。このとき data スロットは、元の data スロットとデータフレームをマージしたものになります。マージを行うには、空間オブジェクトとデータフレームの双方に、対応付けに使う ID を含む列が必要です。
nyc_tracts と nyc_income のどちらにも地区(tract)の ID 列があるので、2つのデータセットをマージするのに最適です。ただし、提案する ID が一意であること、そして双方のデータセットのすべての行に対応があることを確認するのは常に良い習慣です。
マージに進む前に、これを確認しておきましょう。
この演習はコースの一部です
R で地理空間データを可視化する
演習の手順
nyc_income$tractに対してduplicated()とany()を使い、nyc_incomeの各行が一意の tract ID を持つか確認してください。nyc_tracts$TRACTCEに対してduplicated()とany()を使い、nyc_tractsの各行が一意の tract ID を持つか確認してください。nyc_tracts$TRACTCE %in% nyc_income$tractにall()を使い、nyc_tractsの tract がすべてnyc_incomeに含まれているか確認してください。nyc_income$tract %in% nyc_tracts$TRACTCEにall()を使い、nyc_incomeの tract がすべてnyc_tractsに含まれているか確認してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Check for duplicates in nyc_income
# Check for duplicates in nyc_tracts
# Check nyc_tracts in nyc_income
# Check nyc_income in nyc_tracts