У меня есть набор данных, который содержит информацию о населении.В моем исходном наборе данных каждая строка - это человек , а каждый столбец - переменная:
- Район (
CBSWIJKCD
) - Соседство (
CBSBUURTCD
) - Возрастная категория (
Leeftijd_5jr
) - Дата (
mutdat
)
Я хочу объединить эти данные, чтобы каждая строка представляла район или район,и столбцы представляют:
- район / район (
SoortRegio
) - Плюс, название района / района (
Naam
)
- Всего жителей (
TotaalInwoners
) - Общее количество людей в каждой возрастной категории (
0-4
, 5-9
и т. Д.) - Дата (
mutdat
)
и в столбцах общее количество жителей и общее количество людей, попадающих в каждую возрастную категорию.Смотрите образец ниже.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я собираю столбцы района / района, мои строки больше не представляют каждого человека, поэтому подсчет их с использованием n()
в выражении dplyr не имеет смысла.
Образец исходных данных:
CBSWIJKCD mutdat CBSBRTCD Leeftijd_5jr
<chr> <date> <chr> <chr>
1 Graft-De Rijp 2018-01-01 De Rijp 0-4
2 Graft-De Rijp 2018-01-01 De Rijp 0-4
3 Graft-De Rijp 2018-01-01 De Rijp 0-4
4 Graft-De Rijp 2018-01-01 De Rijp 0-4
5 Graft-De Rijp 2018-01-01 De Rijp 0-4
6 Graft-De Rijp 2018-01-01 De Rijp 0-4
7 Graft-De Rijp 2018-01-01 De Rijp 0-4
8 Graft-De Rijp 2018-01-01 De Rijp 0-4
9 Graft-De Rijp 2018-01-01 De Rijp 0-4
10 Graft-De Rijp 2018-01-01 De Rijp 0-4
Как должны выглядеть требуемые данные:
# A tibble: 76 x 26
mutdat SoortRegio Naam InwonerAantal `0-4` `10-14` `104+` `15-19` `20-24` `25-29` `30-34` `35-39` `40-44`
<date> <chr> <chr> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 2018-01-01 CBSWIJKCD Graft-De Rijp 1426 83 88 NA 84 58 68 78 95 111
2 2018-01-01 CBSBRTCD De Rijp 2022 107 102 NA 92 71 75 76 120 137
3 2018-01-01 CBSBRTCD Schermer 1431 85 93 NA 99 98 74 73 83 92
4 2018-01-01 CBSBRTCD Bergermeer 49 2 4 NA 4 2 1 3 2 5
5 2018-01-01 CBSBRTCD Boekelemeer 2963 117 91 NA 100 192 388 277 225 196
DPUT образца данных, с которыми я работаю
structure(list(CBSWIJKCD = c("West", "Graft-De Rijp", "Daalmeer/Koedijk",
"Zuid", "Daalmeer/Koedijk", "Graft-De Rijp", "Oudorp", "De Mare",
"Oudorp", "Centrum", "Schermer", "De Mare", "Zuid", "Centrum",
"Overdie", "West", "Oudorp", "De Mare", "West", "West"), CBSBRTCD = c("De Hoef I en II",
"De Rijp", "Daalmeer-Noordwest", "Bloemwijk en Zocherkwartier",
"Daalmeer-Zuidwest", "De Rijp", "Oudorperpolder-Zuid", "De Mare",
"Oudorperpolder-Midden", "Spoorbuurt", "Schermerhorn", "t Rak-Noord",
"Kooimeer", "Binnenstad-Oost", "Oud-Overdie", "De Hoef III en IV",
"Oudorperpolder-Midden", "De Horn-Noord", "De Hoef III en IV",
"Bergermeer"), Leeftijd_5jr = c("30-34", "10-14", "30-34", "45-49",
"60-64", "75-79", "70-74", "85-89", "65-69", "70-74", "50-54",
"60-64", "35-39", "40-44", "20-24", "10-14", "15-19", "70-74",
"65-69", "15-19"), mutdat = structure(c(17532, 17532, 17532,
17532, 17532, 17532, 17532, 17532, 17532, 17532, 17532, 17532,
17532, 17532, 17532, 17532, 17532, 17532, 17532, 17532), class = "Date")), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
Я пробовал:
library(tidyverse)
df3 <- df2 %>%
gather(key = "SoortRegio", value = "Naam", CBSWIJKCD:CBSBRTCD, -mutdat, -Leeftijd_5jr) %>%
group_by(Naam) %>%
mutate(InwonerAantal = n()) %>%
ungroup()
df4 <- df3 %>%
group_by(SoortRegio, Naam, Leeftijd_5jr) %>%
mutate(aantal = n()) %>%
ungroup() %>%
unique() %>%
spread(Leeftijd_5jr, aantal)
Но при фильтрации на CBSWIJKCD и подсчете числа (я должен в итоге получить 108475 человек)Я получаю 110951 ..