簡體   English   中英

合並合並數據后,spacepolygonsdataframe多邊形混雜不清

[英]spatialpolygonsdataframe polygons jumbled after merge to join data

我正在嘗試使用R繪制一些土耳其語數據。

我遇到的問題是,當我將我的數據與形狀文件(采用spacepolygonsdataframe格式)合並時,數據不再與正確的pologon相匹配。 我究竟做錯了什么,

下面是一些可復制的代碼。 形狀文件是一些自然地球數據 (因此屬於公共領域),我已將其放在壓縮有簡單數據excel文件的Google驅動器上。 在合並之前和之后,將生成2個地塊,並標有省名。 您會看到第二張圖像已經“弄亂了”數據,並且Turkey.map@data不再與正確的多邊形匹配。

在合並具有正確省名的地塊之前: 合並之前 合並圖后: 合並后

library(maptools)
library(readxl)

temp <- "TurkeyShapefile.zip"
URL      <- "https://docs.google.com/ucid=0B0TyKM0aACIONUxfNTJwWGhrR0k&export=download"
download.file(URL,temp, mode="wb")
unzip(temp)

trtr <- readShapeSpatial("Natural_earth_admin_RMS150518_TR")

#read excel file
fname <- "TR_data.xlsx"
TRdata <- read_excel(fname, sheet = "pcnt")

Turkey.map <- trtr       #create copy of trtr

#a plot of the map before the merge
plot(Turkey.map)
invisible(text(getSpPPolygonsLabptSlots(Turkey.map), labels=as.character(Turkey.map@data$Admin1Name), cex=0.5))


#merge (join data)
Turkey.map@data <- merge(Turkey.map@data,TRdata,by.x="Admin1Name",by.y="Province", all.x=TRUE)

#a plot of the map after the merge
plot(Turkey.map)
invisible(text(getSpPPolygonsLabptSlots(Turkey.map), labels=as.character(Turkey.map@data$Admin1Name), cex=0.5))

非常感謝!

如果對空間對象上的@data插槽執行任何操作可能會重新排序,那么您將痛苦@data 通常,您應該通過手動調用匹配數據集之間的ID字段上的which()來完成所有操作,或者在您的情況下,也可以在SpatialPolygonsDataFrame對象本身上調用merge()

Turkey.map <- merge(
    Turkey.map, TRdata, 
    by.x="Admin1Name", by.y="Province", 
    all.x=TRUE
)

好奇為什么OP在合並Spatial*對象和data.frame時沒有看到正確的輸出,這是一個完全可重現的示例,顯示了正確的行為:

library(sp)

##  Reproducible 10x10 grid of polygons:
set.seed(2002)
grd <- GridTopology(c(1,1), c(1,1), c(10,10))
polys <- as(grd, "SpatialPolygons")
centroids <- coordinates(polys)
x <- centroids[,1]
y <- centroids[,2]
z <- 1.4 + 0.1*x + 0.2*y + 0.002*x*x
d <- SpatialPolygonsDataFrame(
  polys,
  data=data.frame(
    x=x, y=y, z=z, ID=1:length(x), 
    row.names=row.names(polys)
  )
)

df <- data.frame("ID"=1:10, color="black")

class(d)
class(df)

產量:

class(d)
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
class(df)
[1] "data.frame"

然后合並兩個:

##  The merge of a SpatialPolygonsDataFrame and a data.frame:
dm <- merge(d, df, by.x="ID", by.y="ID", all.x=T)

##  Verify we still have a Spatial* object:
class(dm)
names(dm)

產量:

class(dm)
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
names(dm)
[1] "ID"    "x"     "y"     "z"     "color"

plot(dm, col=dm$color)

在此處輸入圖片說明

> sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices
[4] utils     datasets  methods  
[7] base     

other attached packages:
[1] sp_1.1-1

loaded via a namespace (and not attached):
[1] tools_3.2.1     grid_3.2.1     
[3] lattice_0.20-31

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM