我有以下问题,不知道如何继续:
我想用德国风力发电厂的数据做一个等值热图。 因此我使用一个形状文件,映射所有德国邮政编码(工作正常)。
第二个数据框包含德国所有新安装的风力发电厂。我想表明,随着时间的推移,ZIP区域的安装容量最高。
当我尝试在包choroplethr
内执行此操作时,我面临的问题是,在与发电厂的数据框中,大约有1000000行,因此几个邮政编码重复(很多邮政编码)包含一个以上的风力发电厂......)。
由于这个原因,我收到以下错误消息:
anyDuplicated(self$user.df$region) == 0 is not TRUE
这是代码。它基于此示例:https://www.r-bloggers.com/case-study-mapping-german-zip-codes-in-r/
library(sf)
library(choroplethr)
library(dplyr)
library(ggplot2)
library(rgdal)
library(maptools)
library(gpclib)
library(readr)
library(R6)
ger_plz <- readOGR(dsn = ".", layer = "plz-5stellig")
ger_plz2 <- read_sf("...plz-5stellig.shp")
ger_plz@data$id <- rownames(ger_plz@data)
ger_plz.point <- fortify(ger_plz, region="id")
ger_plz.df <- inner_join(ger_plz.point,ger_plz@data, by="id")
BNETZAVZ <-read.csv2("WindPower DATA.csv",
header = TRUE, sep = ";", dec = ",")
BNETZAVZ_k <- subset(BNETZAVZ, inst_leistung >= 100 & energietraeger >= "7" & energietraeger<="8" & stat_Relevanz=="1",
select=c(anlagenschl, plz, inst_leistung, spannungsebene, inbetriebnahme, ausserbetriebnahme, regelzone_name, energietraeger))
#BNETZAVZ_k$inbetriebnahme <- dmy_hms(as.character(BNETZAVZ$inbetriebnahme))
print(BNETZAVZ_k$plz)
# Datum funktioniert so::)
BNETZAVZ_k$inbetriebnahme <- as.Date(BNETZAVZ_k$inbetriebnahme, format = "%d.%m.%Y %H:%M:%S")
BNETZAVZ_k2000 <- subset(BNETZAVZ_k, inbetriebnahme >="2000-01-01")
# variable name 'region' is needed for choroplethr
ger_plz.df$region <- ger_plz.df$plz
#subclass choroplethr to make a class for your my need
GERPLZChoropleth <- R6Class("GERPLZChoropleth",
inherit = choroplethr:::Choropleth,
public = list(
initialize = function(user.df) {
super$initialize(ger_plz.df, user.df)
}
)
)
#choropleth needs these two columnames - 'region' and 'value'
colnames(BNETZAVZ_k2000) [1] <- "EEG-key"
colnames(BNETZAVZ_k2000) [2] <- "region"
colnames(BNETZAVZ_k2000)[3] <- "value"
BNA <- data.frame(BNETZAVZ_k2000$region, BNETZAVZ_k2000$value)
colnames(BNA) = c("region", "value")
#instantiate new class with data
c <- GERPLZChoropleth$new(BNA)
#错误消息显示在上面的行中...
#plot the data
c$ggplot_polygon = geom_polygon(aes(fill = value), color = NA)
c$title = "Capacity Windkraft BNETZA"
c$legend= "Capacity per Zipcode"
c$set_num_colors(9)
c$render()
答案 0 :(得分:1)
我是choroplethr的作者,不幸的是我在理解你的问题时遇到了一些困难。但是,我认为你问题的关键部分是:
我想展示一下,ZIP区域是最高的安装区域 容量随着时间的推移。
我不知道&#34;随着时间的推移最高的装机容量&#34;确切地意味着,或者如何从您拥有的数据中获得该值。
但是choroplethr要求您的数据采用非常特殊的格式:
region
,一列名为value
。region
中的每个值都应与shapefile中的某个区域匹配。在幕后,choroplethr将您的数据框架与shapefile合并。如果您的数据包含重复区域,则无法进行合并,因为您要使用的值不明确。
从阅读你的问题来看,我并不完全确定你的情况。但我认为您可能希望处理数据,以便每个区域出现一次,并且该值是您谈论的两个文件的某个函数。
但是,为了完整起见,我提到您至少可能尝试创建bivariate choropleth。 Choroplethr目前没有这种功能。