【问题标题】:How to change the name of SpatialPolygons in a loop如何在循环中更改 SpatialPolygons 的名称
【发布时间】:2017-05-15 06:07:33
【问题描述】:

我希望创建按地区对国家进行分组的 shapefile。国家多边形来自 getData 函数。我创建了一个数据框来将每个国家与地区相关联。以下是西班牙(欧洲 EUR)、法国(欧洲 EUR)和巴西(拉丁美洲 LAM)的简单示例。

我希望的最后两个空间多边形是:

欧元: 林:

我写了以下循环,但不知道如何为每个区域 i 创建不同的多边形。

library(raster)
regions <- data.frame(REGION= c('EUR', 'EUR',  'LAM'), ISO= c('ESP', 'FRA', 'BRA'))

for (i in c('EUR', 'LAM')){ 
    for (j in c('ESP', 'FRA', 'BRA')) { 
    ISO_code <- regions[regions$REGION==i & regions$ISO==j,]$ISO
    if (length(ISO_code)==0) next #as FRA will never be in LAM for example
    else {
      temp <- getData('GADM', country=as.character(ISO_code), level=0)
      if(j==1) regionpoly <- temp
      else regionpoly <- gUnion(regionpoly, temp)
    }
    }
}

这个循环的当前输出是:

非常感谢您的帮助

【问题讨论】:

    标签: r gis spatial r-raster


    【解决方案1】:

    我会将您的 regions 数据框与国家级 SpatialPolygonsDataFrame 的数据槽合并。然后,您可以根据您定义的区域将空间对象拆分为列表。

    library(raster)
    library(rgeos)
    
    regions <- data.frame(REGION = c("EUR", "EUR",  "LAM"), 
                          ISO = c("ESP", "FRA", "BRA"),
                          stringsAsFactors = FALSE)
    
    # Load data into a list
    states <- lapply(regions$ISO, function(x) getData("GADM", country = x, level = 0))
    
    # Combine into a single SpatialPolygonsDataFrame object
    states2 <- do.call(bind, states)
    
    # Merge with regions data frame
    states2@data <- merge(states2@data, regions, by = "ISO", sort = FALSE)
    
    # Split into list by region
    states_split <- split(states2, states2$REGION)
    

    【讨论】:

    • 非常感谢您的建议。一个问题是,例如,当我绘制欧元时,显示的国家是 BRA 和 FRA plot(states_split$EUR)。不知道如何解决这个问题...
    • 抱歉,这是由于 merge() 自动重新排序其输出 - 我不习惯使用 base R joins 。 . .现在应该没事了。
    猜你喜欢
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多