CSVファイルをシェープファイルに結合


9

CSVファイルをシェープファイルに結合したいと思いました。

結合を容易にするフィールドを特定したとき、たとえば、

map <- spChFIDs(map, as.character(map$ID))

戻った

spChFIDs(SP、x)のエラー:長さが異なります

誰かアドバイスできますか?


ありがとう。ただし、列IDには、結合フィールドとして使用できる一意の値があります。フィールドの入力は同じ長さでなければなりませんか?
user3915459 14

地図とcsvのサンプルを投稿できますか?
cengel 14

@cengel巨大なデータセットであり、スクリーンショットではバリエーションを示すのに十分ではありません。シェープファイル「マップ」のフィールド「ID」は、(さまざまな桁数の)数字の文字列です。
user3915459 14

おそらくCSVをテーブルに保存して、結合フィールドが同じデータ型であることを確認します。
クレウィス2014

回答:


7

これはあなたがRでそれを行う方法です sp::merge

library(raster)
# read data    
p <- shapefile("path/file.shp")
d <- read.csv("path/file.csv")

# merge on common variable, here called 'key'
m <- merge(p, d, by='key')

# perhaps save as shapefile again
shapefile(m, "path/merged.shp")

こんにちは@RobertH、私は昨日投稿した質問からここに送られました。共通変数でマージする場合、その変数をシェープファイルまたはCSVからプルしますか?2つの変数は内容では一致していますが、名前では一致していません。私は少しそれを試してみて、エラーを得続けました(主に:[.data.frame(x @ data、、by.x、drop = FALSE)のエラー:未定義の列が選択されました)
Lauren

1
理解した。名前が異なる2つのレイヤーを結合する必要があるため、形式を少し変更する必要がありました。それは、merge(p、d、by.x = "key"、by.y = "matching.key")に似ています
Lauren

3

Rを使用してcsvでシェープファイルを結合する方法がわかりません。ただし、これが役立つ場合は、プラグインMMQGISを使用してQGISでこれを行うこともできます。

ここに画像の説明を入力してください


ありがとう。私は前のArcGISで試してみたが、データセットが巨大であると私はR.でこれを行うことを好む
user3915459

2

Rで作業している場合は、シェープファイルと.csvをdata.frameまたはdata.tableとしてロードする必要があります。join()を使用してそれらをマージできます。

どんな種類のシェープファイルを持っているかについてもっと情報がありますか?

シェープファイルとデータをマージするとき、私は次のことをやっていて幸運でした。"layer"引数では.shp拡張子を省略する必要があることに注意してください。私は「GEOID」を使用しました。興味のある「形」の名前は何でも付けます。

library("rgdal")
library("data.table")
shapefile = readOGR(dsn = "DIRECTORY WITH SHAPEFILES", layer = "THE ACTUAL SHAPEFILE")
shapefile@data$id = rownames(shapefile@data)
shapefile.points = fortify(shapefile, region = "id")
shapefile.df = join(shapefile.points, shapefile@data, by = "id")
shapefile.df = subset(shapefile.df, select = c(long, lat, group, GEOID))
names(shapefile.df) = c("long", "lat", "group", "GEOID")

次に、次のようなものを使用してデータをマージできます

full.data = join(mydata, shapefile.df, by = "GEOID", type = "full")

1

Rで作業している場合、マージは実際には必要ありません。ggplotを使用して、データをマップに表示できます。私の例を見てください。この1つのライナーは、シェイプファイルで不思議に機能しますbangladesh = fortify(p1, region = "ADM1_EN")。そして、あなたは使うことができます

ggplot() + geom_map(data = br2016a, aes(map_id = ADM1_EN, fill = HectareLocal), 
                    map =bangladesh) +
  expand_limits(x = bangladesh$long, y = bangladesh$lat) + 
  coord_fixed(.96) +
  scale_fill_gradient(low="thistle2", high="darkred", 
                      guide="colorbar", na.value="white") +
  labs(title = "Bangladesh Boro Rice (Local variety), 2016", x = element_blank(), y = element_blank(), 
       fill='Hectares') +   theme(legend.position = "bottom") 

そして、私が手に入れる地図はこちらです。

出力

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.