Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## wczytuje pakiety
- ```
- library(tidyverse) ## dplyr, stringr, tidyr i inne
- library(readxl)
- library(writexl) ## ewentualny zapis do excela
- ```
- ## nazwy kolumn
- ```
- sex <- rep(c("ogolem","Kobiety","Mezczyzni"),16)
- age <- rep(c(rep("ogolem",3),rep("do17",3),rep("18do64",3),rep("powyżej65",3)),4)
- quarter <- c(rep("Q1",12),rep("Q2",12),rep("Q3",12),rep("Q4",12))
- nazwy <- tolower(paste(quarter, age, sex, sep = '_'))
- ```
- Tak wyglądają nazwy zgodnie z hierarchią danych w ZUS czyli najpierw kwartał, później wiek, a na końcu płeć.
- ```
- > nazwy
- [1] "q1_ogolem_ogolem" "q1_ogolem_kobiety" "q1_ogolem_mezczyzni" "q1_do17_ogolem"
- [5] "q1_do17_kobiety" "q1_do17_mezczyzni" "q1_18do64_ogolem" "q1_18do64_kobiety"
- [9] "q1_18do64_mezczyzni" "q1_powyżej65_ogolem" "q1_powyżej65_kobiety" "q1_powyżej65_mezczyzni"
- [13] "q2_ogolem_ogolem" "q2_ogolem_kobiety" "q2_ogolem_mezczyzni" "q2_do17_ogolem"
- [17] "q2_do17_kobiety" "q2_do17_mezczyzni" "q2_18do64_ogolem" "q2_18do64_kobiety"
- ```
- ## Nazwy plikow
- Używam dir (można też list.files)
- ```
- pliki <- dir(pattern = '*.xlsx')
- ```
- Tak wygladaja pliki (miałem kod w tym samym miejscu).
- ```
- > pliki
- [1] "CHOROBOWE_działalność gosp.xlsx"
- [2] "CHOROBOWE_osoby fizyczne.xlsx"
- [3] "CHOROBOWE_pracownicy.xlsx"
- [4] "EM.RENT._działalność gosp.xlsx"
- [5] "EM.RENT._osoby fizyczne.xlsx"
- [6] "EM.RENT._pracownicy.xlsx"
- [7] "ZDROWOTNE_pracownicy.xlsx"
- [8] "ZDROWOTNE._działalność gosp.xlsx"
- [9] "ZDROWOTNE._osoby fizyczne.xlsx"
- ```
- ## tworze sobie data.frame z nazwami plikow i arkuszami
- ```
- pliki_arkusze <- pliki %>%
- set_names() %>%
- map_df(~ excel_sheets(.) %>% data.frame(sheet = .),
- .id = 'file') %>%
- mutate(group = gsub('\\.xlsx', '', file),
- year = gsub('03\\,06\\.', '', sheet))
- ````
- Poniżej jak wygląda ten `data.frame`
- ```
- file sheet group year
- 1 CHOROBOWE_działalność gosp.xlsx 2016 CHOROBOWE_działalność gosp 2016
- 2 CHOROBOWE_działalność gosp.xlsx 2017 CHOROBOWE_działalność gosp 2017
- 3 CHOROBOWE_działalność gosp.xlsx 03,06.2018 CHOROBOWE_działalność gosp 2018
- 4 CHOROBOWE_osoby fizyczne.xlsx 2016 CHOROBOWE_osoby fizyczne 2016
- 5 CHOROBOWE_osoby fizyczne.xlsx 2017 CHOROBOWE_osoby fizyczne 2017
- 6 CHOROBOWE_osoby fizyczne.xlsx 03,06.2018 CHOROBOWE_osoby fizyczne 2018
- 7 CHOROBOWE_pracownicy.xlsx 2016 CHOROBOWE_pracownicy 2016
- 8 CHOROBOWE_pracownicy.xlsx 2017 CHOROBOWE_pracownicy 2017
- 9 CHOROBOWE_pracownicy.xlsx 03,06.2018 CHOROBOWE_pracownicy 2018
- ```
- # Kod do wczytania wszystkich plików i wszystkich arkuszy
- Używam kombinacji funkcji `dplyr::group_by` i `dplyr::do`, a następnie `tidyr::unnest` bo dane wczytane są do list.
- Poźniej trochę przetwarzam dane żeby jako tako wyglądały.
- ```
- dane <- pliki_arkusze %>%
- group_by(group, year) %>%
- do(excel = read_excel(path = .$file[[1]],
- sheet = .$sheet[[1]],
- skip = 8,
- col_names = FALSE) %>%
- ## usuwam pusty wiersz po ostatnim rekordzie ("pozostale") i objasnienia zaczynajace się od *
- filter(!is.na(X__1), !grepl('^\\*{1,3}\\)', X__1)) %>%
- mutate_at(vars(-X__1), as.numeric)) %>%
- unnest(excel) %>%
- setNames(c('group', 'year', 'country', nazwy)) %>%
- gather(stats, number, -group, -year, -country) %>%
- separate(stats, c('quarter', 'age', 'sex')) %>%
- na.omit() %>%
- separate(group, c('type', 'group'), sep = '_') %>%
- mutate(type = gsub('\\.$','', type))
- ```
- W wyniku dostaje taką tabelę
- ```
- > dane
- # A tibble: 107,316 x 8
- type group year country quarter age sex number
- <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
- 1 CHOROBOWE działalność gosp 2016 AFGAŃSKIE q1 ogolem ogolem 37
- 2 CHOROBOWE działalność gosp 2016 ALBAŃSKIE q1 ogolem ogolem 15
- 3 CHOROBOWE działalność gosp 2016 ALGIERSKIE q1 ogolem ogolem 52
- 4 CHOROBOWE działalność gosp 2016 AMERYKAŃSKIE q1 ogolem ogolem 152
- 5 CHOROBOWE działalność gosp 2016 ANDORSKIE q1 ogolem ogolem 1
- 6 CHOROBOWE działalność gosp 2016 ANGOLSKIE q1 ogolem ogolem 4
- 7 CHOROBOWE działalność gosp 2016 ARGENTYŃSKIE q1 ogolem ogolem 7
- 8 CHOROBOWE działalność gosp 2016 ARMEŃSKIE q1 ogolem ogolem 455
- 9 CHOROBOWE działalność gosp 2016 AUSTRALIJSKIE q1 ogolem ogolem 13
- 10 CHOROBOWE działalność gosp 2016 AUSTRIACKIE q1 ogolem ogolem 76
- # ... with 107,306 more rows
- ```
Add Comment
Please, Sign In to add comment