Группируя и суммируя данные, вы получаете менее 5000 строк, потому что ваш вызов sample
позволяет отрисовывать почтовые индексы более одного раза. Дублированные почтовые индексы затем сжимаются в одно значение на group_by
+ summarise
. Ваш фрейм данных new_df
теперь имеет 102 строки, и если вы хотите построить его, каждая определенная эстетика должна иметь длину 1 или 102 (количество строк в вашем фрейме данных). Вместо этого вы пытаетесь ввести векторы длиной 5000 (те, которые вы инициализировали в начале).
Что вам нужно сделать, это обновить переменные zip
и outcome
после того, как вы сократили свой фрейм данных:
library(tidyverse)
set.seed(1) ##I set a seed, just to ensure reproducibility
zip <- sample(100:201, 5000, replace = TRUE)
outcome <- rbinom(5000, 1, 0.23)
df <- data.frame(id, outcome, zip) %>% as_tibble()
new_df <- df %>% group_by(zip) %>% summarise(ratio = mean(outcome))
zip <- new_df %>% pull(zip) # only get the zips in your sample
outcome <- new_df %>% pull(outcome) # only get the outcomes in your sample
library(ggplot2)
library(maptools)
library(rgdal)
library(ggthemes)
setwd("path")
shape <- readOGR(dsn = ".", layer = "plz-5stellig")
shape_df <- fortify(zips, note="Berlin")
gg <- ggplot()
gg <- gg + geom_map(data=new_df, map=shape_df,
aes(fill=outcome, map_id=zip),
color="#7f7f7f", size=0.25)
gg