Агрегирование данных по строкам и столбцам с использованием сбора и распределения - PullRequest
0 голосов
/ 24 октября 2018

У меня есть набор данных, который содержит информацию о населении.В моем исходном наборе данных каждая строка - это человек , а каждый столбец - переменная:

  • Район (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 ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...