2012-08-04 3 views
1

디버깅 할 수없는 데이터로 시도 할 때 몇 가지 오류가 발생합니다. 여기 공간 데이터로 작업 할 때 오류가 발생했습니다.

R입니다 스크립트 https://dl.dropbox.com/u/28231177/This%20Should%20Work.R
내가 그들을 실행할 때 다음 데이터

다음

오류를 포함 지난 몇 라인입니다 https://dl.dropbox.com/u/28231177/my_data.csv입니다 :

pds <- fortify(sf_map) 
# Using OBJECTID to define regions. 
pds$OBJECTID <- as.integer(pds$OBJECTID) 
# Error in `$<-.data.frame`(`*tmp*`, "OBJECTID", value = integer(0)) : 
# replacement has 0 rows, data has 16249 


### Make the map 

p1 <- ggplot(my_data, aes(map_id = zip)) 
p1 <- p1 + geom_map(aes(fill=vol, map_id = zip), map = pds) 
p1 <- p1 + expand_limits(x = pds$lon, y = pds$lat) + coord_equal() 
p1 + xlab("Basic Map with Default Elements") 
# Error in unit(x, default.units) : 'x' and 'units' must have length > 0 
+0

이며, 여기 Shape 파일이 http://dl.dropbox.com/u/28231177/sfzipcodes.zip – user1576537

+1

이름 (이란 pds)? 나는 OBJECTID가 그들 중 하나가 아니라고 감히 말한다. pds $ OBJECTID <- as.integer (pds $ OBJECTID) 행은 가정이 충분하다는 가정하에 그 열이 있다고 가정합니다. – mdsumner

+0

@mdsumner, 이것은 내가 얻은 것입니다 : 'pds <- fortify (sf_map) # 영역을 정의하기 위해 OBJECTID 사용. 이름 (pds) # [1] "긴" "위도" "주문" "구멍" "조각" "그룹" "id"' 당신 말이 맞아 보입니다. 어떤 열이 설정되어야합니까? 신분증? – user1576537

답변

2

귀하의 코드는 나를 위해 작동 설정 한 경우

pds <- fortify(sf_map, region = "ID") 

및 removin @mdsumner에서 언급 한 바와 같이 g 라인

pds$OBJECTID <- as.integer(pds$OBJECTID) 

또한 당신은 long하지 lon를 사용해야합니다. 여기

은 ( geom_polygon 사용하지 geom_map) 약간 다른 솔루션도

library(maptools) 
library(ggplot2) 

## 'fortify' needs 'library(gpclib)' locally available 
gpclibPermit() 

## Import the shapefile 
sf_map <- readShapeSpatial("sfzipcodes", ID = "ID") 

## Import the data 
my_data <- read.csv("my_data.csv") 
my_data <- unique(my_data) 

## Merge the data 
sf_df <- fortify(sf_map, region='ID') 
sf_df <- merge(sf_df, my_data, by.x="id", by.y="zip", all=FALSE) 
sf_df <- sf_df[order(sf_df$group, sf_df$order), ] 

## Make the map 
p2 <- ggplot(sf_df, aes(x=long, y=lat, group=group, fill=vol)) 
p2 <- p2 + geom_polygon() + coord_equal() 
p2 <- p2 + xlab("Basic Map with Default Elements") 
p2 
관련 문제