Closed evaozebek closed 6 years ago
Pri razpredelnici poroke.starost
bi šel uvoz tako:
poroke.starost <- read_csv2(file ="podatki/Tabela2.csv", skip = 3, n_max = 13, locale = sl,
trim_ws = TRUE, na = c("-", ""))
stolpci <- data.frame(leto = colnames(poroke.starost) %>% { gsub("X.*", NA, .) } %>% parse_number(),
nevesta = unlist(poroke.starost[1, ])) %>% fill(leto) %>%
apply(1, paste, collapse = ",")
stolpci[1] <- "zenin"
colnames(poroke.starost) <- stolpci
poroke.starost.tidy <- melt(poroke.starost[-1, ], variable.name = "stolpec",
value.name = "stevilo", id.vars = "zenin") %>%
filter(! grepl("SKUPAJ", zenin), ! grepl("SKUPAJ", stolpec)) %>%
mutate(stolpec = parse_character(stolpec)) %>%
transmute(leto = stolpec %>% strapplyc("^([0-9]+)") %>% unlist() %>% parse_number(),
zenin = zenin %>% strapplyc("^(.* let)") %>% unlist(),
nevesta = stolpec %>% strapplyc(",(.* let)") %>% { gsub("65", "65 +", .) } %>% unlist(),
stevilo = stevilo %>% parse_number()) %>%
mutate(zenin = zenin %>% parse_factor(unique(zenin), ordered = TRUE),
nevesta = nevesta %>% parse_factor(unique(nevesta), ordered = TRUE))
Za razliko od anamkravanja#1 imaš v starostih številke, tako da raje med letnico in starost postaviš vejico, s katero se potem orientiraš pri razbijanju dobljenih imen stolpcev. Za uporabo funkcije fill
potrebuješ knjižnico tidyr
- najbolje, da jo uvoziš kar v lib/libraries.r
in ta program vsakič poženeš pred začetkom dela, da se naložijo potrebne knjižnice.
Ker lahko sumarne podatke (tj., kjer starost vsebuje niz SKUPAJ
) izračunaš iz ostalih podatkov, jih je potrebno iz razpredelnice v obliki tidy data izločiti. Da bodo starostne kategorije pravilno urejene (in se bodo ustrezno prikazale na grafih), bo treba poskrbeti za ustrezno ureditev (sicer bi se uredile po abecedi in bi kategorija Pod 20 let prišla na konec). Funkcija unique
vrača vektor različnih vrednosti v vrstnem redu prve pojavitve, tako da sta dobljena faktorja ustrezno urejena (zadnja kategorija pri ženinih je 65 + let, pri nevestah je bila 65 let ali več - ker se ohrani samo niz do besede let
, z ustrezno zamenjavo pride do poenotenja imen kategorij, tako da sta oba stolpca primerljiva).
Pri razpredelnici razveze.starost
bo enostavneje, saj imaš v stolpcih samo eno dimenzijo. Vseeno pa bo treba poskrbeti za izločanje sumarnih podatkov in ustrezne kategorije:
razveze.starost <- read_csv2(file ="podatki/Tabela4.csv", skip = 3, n_max = 253, locale = sl) %>%
fill(1) %>% drop_na(2) %>% melt(id.vars = 1:2, variable.name = "zena", value.name = "stevilo")
colnames(razveze.starost)[1:2] <- c("leto", "moz")
razveze.starost.tidy <- razveze.starost %>%
filter(! grepl("SKUPAJ", moz), ! grepl("SKUPAJ", zena)) %>%
mutate(moz = moz %>% strapplyc("^(.* let)") %>% unlist(),
zena = zena %>% parse_character() %>% strapplyc("^(.* let)") %>% unlist() %>%
{ gsub("pod", "Pod", .) }) %>%
mutate(moz = moz %>% parse_factor(unique(moz), ordered = TRUE),
zena = zena %>% parse_factor(unique(zena), ordered = TRUE))
Imam težavo pri urejanju tabel z več dimenzijami, to sta tabeli 2 (poroke.starost) in 4 (razveze.starost). Kljub temu, da sem prebrala issue na podobno temo, ki ga je odprla anamkravanja, še vednp ne razumem, kako se taka tabela spremeni v obliko tidy data. Ni mi jasno kako moram poimenovati stolpce, da jih lahko potem razbijem. Hvala!