0

csv ファイルから dbf ファイルに属性を結合した後、R で .shp ファイルを開く際に問題が発生しました。R でのコーディングの経験は豊富ですが、R での GIS の経験は限られています。ArcGIS の経験はありますが、プログラムにアクセスできなくなりました。csvファイルとプロットポイントを使用してRでバブルプロットやその他のマップを作成する方法を知っていますが、属性を.dbfに追加し、シェープファイルを使用して郡の領域を醸造パレットで塗りつぶしたいと考えています。属性を .dbf ファイルに結合する前に、形状ファイルを正常に開くことができます (ファイルは、米国国勢調査局の Web ページから取得しました)。

以下は私のコードです:

library(gpclib)
library(maptools)
library(RColorBrewer)
library(classInt)
library(TeachingDemos)


gci<-read.csv("C:/Users/Smackbug/marketingmapexample.csv", header=TRUE) #Has Geo_ID
#read in dbf file to append data
gci2<-gci
gci2<-na.omit(gci2) #remove any empty data points

#read in dbf file to add attributes
akdbf<-read.dbf(file.choose())#downloaded from the us census bureau

#merge to join attributes
joined<-merge(akdbf,gci2, by=c("GEO_ID"))
#Save original and new dbf
write.dbf(akdbf, "C:/Users/Smackbug/Desktop/shapefiles/gz_2010_02_060_00_500koriginal.dbf")
write.dbf(joined, "C:/Users/Smackbug/Desktop/shapefiles/gz_2010_02_060_00_500k.dbf")

コードのこの部分からエラーが発生します

**alaska<-readShapePoly(file.choose(),proj4string=CRS("+proj=longlat") )
Error in `row.names<-.data.frame`(`*tmp*`, value = value) : 
  invalid 'row.names' length**

そして残りのコード

#the rest of the code should look something like this

colors<-brewer.pal(5,"Reds")
brks<-classIntervals(alaska$medianIncome, n=5, style="fixed", fixedBreaks=c(0,25,50,100,250))
plot(brks, pal=colors)
brks<-brks$brks
plot(alaska, col=colors[findInterval(alaska$medianIncome, brks, all.inside=TRUE)], axes=F)
4

2 に答える 2

0

上記の Jeffery のコードの一部を使用した動作結果を次に示します (Jeffery の助けに感謝します)。

library(sp)
library(rgdal)
library(foreign)

setwd("C:/Users/rhonda/Documents/R scripts/shapefiles")
gc<-read.csv("gcmarketingmapexample.csv", header=TRUE) 
#read in dbf file to append data
akdbf<-read.dbf("gz_2010_02_060_00_500k.dbf")
#merge to join attributes
joined<-merge(akdbf,gc, by=c("GEO_ID")`enter code here`

#save new dbf 
write.dbf(joined, "akdbf")

#Shape File and DBF file 
frame<-readOGR(getwd(),"gz_2010_02_060_00_500k")
akdbf2<-read.dbf("akdbf.dbf")

frame@data=akdbf2[match(frame@data[,"GEO_ID"], akdbf2[,"GEO_ID"]),]
writeOGR(frame,getwd() , "akdbf",driver="ESRI Shapefile", check_exists=TRUE, overwrite_layer=TRUE)
#use new shapefiles to create maps
于 2013-11-11T20:51:19.933 に答える