library(tidyverse)
## Loading tidyverse: ggplot2
## Loading tidyverse: tibble
## Loading tidyverse: tidyr
## Loading tidyverse: readr
## Loading tidyverse: purrr
## Loading tidyverse: dplyr
## Conflicts with tidy packages ----------------------------------------------
## filter(): dplyr, stats
## lag(): dplyr, stats
t1=read_csv("http://minitorn.tlu.ee/~jaagup/kool/java/kursused/17/r/naited/rahvusarhiiv/kuutulemused.txt")
## Parsed with column specification:
## cols(
## kasutajanimi = col_character(),
## pikkus = col_integer(),
## kuu1aeg = col_integer(),
## kuu1summa = col_integer(),
## kuu2aeg = col_integer(),
## kuu2summa = col_integer(),
## kuu3aeg = col_integer(),
## kuu3summa = col_integer()
## )
t2=t1 %>% select(kasutajanimi, contains("kuu"))
gather(t2, tulp, vaartus, -kasutajanimi)
## # A tibble: 18 x 3
## kasutajanimi tulp vaartus
## <chr> <chr> <int>
## 1 juku kuu1aeg 130
## 2 kati kuu1aeg NA
## 3 mati kuu1aeg 140
## 4 juku kuu1summa 36000
## 5 kati kuu1summa NA
## 6 mati kuu1summa 32000
## 7 juku kuu2aeg 140
## 8 kati kuu2aeg 170
## 9 mati kuu2aeg 150
## 10 juku kuu2summa 32000
## 11 kati kuu2summa 54000
## 12 mati kuu2summa 45000
## 13 juku kuu3aeg NA
## 14 kati kuu3aeg 120
## 15 mati kuu3aeg 90
## 16 juku kuu3summa NA
## 17 kati kuu3summa 25000
## 18 mati kuu3summa 25000
gather(t2, tulp, vaartus, -kasutajanimi, na.rm=TRUE)
## # A tibble: 14 x 3
## kasutajanimi tulp vaartus
## * <chr> <chr> <int>
## 1 juku kuu1aeg 130
## 2 mati kuu1aeg 140
## 3 juku kuu1summa 36000
## 4 mati kuu1summa 32000
## 5 juku kuu2aeg 140
## 6 kati kuu2aeg 170
## 7 mati kuu2aeg 150
## 8 juku kuu2summa 32000
## 9 kati kuu2summa 54000
## 10 mati kuu2summa 45000
## 11 kati kuu3aeg 120
## 12 mati kuu3aeg 90
## 13 kati kuu3summa 25000
## 14 mati kuu3summa 25000
#soovitav kuju
#kasutajanimi kuunr aeg summa
t3=select(t1, kasutajanimi, contains("summa"))
t3
## # A tibble: 3 x 4
## kasutajanimi kuu1summa kuu2summa kuu3summa
## <chr> <int> <int> <int>
## 1 juku 36000 32000 NA
## 2 kati NA 54000 25000
## 3 mati 32000 45000 25000
sub("kuu", "aasta", "kuu1summa")
## [1] "aasta1summa"
sub("kuu([0-9]{1,2})summa", "\\1", "kuu1summa")
## [1] "1"
sub("kuu([0-9]{1,2})summa", "\\1", "kuu12summa")
## [1] "12"
gather(t3, tulp, vaartus, -kasutajanimi) %>%
mutate(kuunr=sub("kuu([0-9]{1,2})summa", "\\1", tulp)) %>%
select(-tulp) %>% complete(vaartus)
## # A tibble: 7 x 3
## vaartus kasutajanimi kuunr
## <int> <chr> <chr>
## 1 25000 kati 3
## 2 25000 mati 3
## 3 32000 mati 1
## 4 32000 juku 2
## 5 36000 juku 1
## 6 45000 mati 2
## 7 54000 kati 2
t2 %>% gather(tulp, kuusumma, contains("summa"), -kasutajanimi)
## # A tibble: 9 x 6
## kasutajanimi kuu1aeg kuu2aeg kuu3aeg tulp kuusumma
## <chr> <int> <int> <int> <chr> <int>
## 1 juku 130 140 NA kuu1summa 36000
## 2 kati NA 170 120 kuu1summa NA
## 3 mati 140 150 90 kuu1summa 32000
## 4 juku 130 140 NA kuu2summa 32000
## 5 kati NA 170 120 kuu2summa 54000
## 6 mati 140 150 90 kuu2summa 45000
## 7 juku 130 140 NA kuu3summa NA
## 8 kati NA 170 120 kuu3summa 25000
## 9 mati 140 150 90 kuu3summa 25000
summad=gather(t3, tulp, vaartus, -kasutajanimi) %>%
mutate(kuunr=sub("kuu([0-9]{1,2})summa", "\\1", tulp)) %>%
select(-tulp)
ajad=select(t1, kasutajanimi, contains("aeg")) %>%
gather(tulp, aeg, -kasutajanimi) %>%
mutate(kuunr=sub("kuu([0-9]{1,2})aeg", "\\1", tulp)) %>%
select(-tulp)
ajad
## # A tibble: 9 x 3
## kasutajanimi aeg kuunr
## <chr> <int> <chr>
## 1 juku 130 1
## 2 kati NA 1
## 3 mati 140 1
## 4 juku 140 2
## 5 kati 170 2
## 6 mati 150 2
## 7 juku NA 3
## 8 kati 120 3
## 9 mati 90 3
summad
## # A tibble: 9 x 3
## kasutajanimi vaartus kuunr
## <chr> <int> <chr>
## 1 juku 36000 1
## 2 kati NA 1
## 3 mati 32000 1
## 4 juku 32000 2
## 5 kati 54000 2
## 6 mati 45000 2
## 7 juku NA 3
## 8 kati 25000 3
## 9 mati 25000 3
inner_join(ajad, summad)
## Joining, by = c("kasutajanimi", "kuunr")
## # A tibble: 9 x 4
## kasutajanimi aeg kuunr vaartus
## <chr> <int> <chr> <int>
## 1 juku 130 1 36000
## 2 kati NA 1 NA
## 3 mati 140 1 32000
## 4 juku 140 2 32000
## 5 kati 170 2 54000
## 6 mati 150 2 45000
## 7 juku NA 3 NA
## 8 kati 120 3 25000
## 9 mati 90 3 25000
kuutulemused=inner_join(ajad, summad, by=c("kasutajanimi", "kuunr")) %>%
complete(aeg) %>% complete(vaartus)
#Koostage võimalikult lühike skript, mis loeb algsel kujul andmed
#ning väljastab tulemused järjestatuna eurodes tunni kohta isikul
#kasutajanimi kuu tunnimyyk
t2
## # A tibble: 3 x 7
## kasutajanimi kuu1aeg kuu1summa kuu2aeg kuu2summa kuu3aeg kuu3summa
## <chr> <int> <int> <int> <int> <int> <int>
## 1 juku 130 36000 140 32000 NA NA
## 2 kati NA NA 170 54000 120 25000
## 3 mati 140 32000 150 45000 90 25000
unite(t2, kuu1, kuu1aeg, kuu1summa)
## # A tibble: 3 x 6
## kasutajanimi kuu1 kuu2aeg kuu2summa kuu3aeg kuu3summa
## * <chr> <chr> <int> <int> <int> <int>
## 1 juku 130_36000 140 32000 NA NA
## 2 kati NA_NA 170 54000 120 25000
## 3 mati 140_32000 150 45000 90 25000
unite(t2, "kuu1", "kuu1aeg", "kuu1summa")
## # A tibble: 3 x 6
## kasutajanimi kuu1 kuu2aeg kuu2summa kuu3aeg kuu3summa
## * <chr> <chr> <int> <int> <int> <int>
## 1 juku 130_36000 140 32000 NA NA
## 2 kati NA_NA 170 54000 120 25000
## 3 mati 140_32000 150 45000 90 25000
nr=1
unite(t1, col=UQ(paste("kuu", nr, sep="")), paste("kuu", nr, "aeg",sep=""), paste("kuu", nr, "summa", sep=""))
## # A tibble: 3 x 7
## kasutajanimi pikkus kuu1 kuu2aeg kuu2summa kuu3aeg kuu3summa
## * <chr> <int> <chr> <int> <int> <int> <int>
## 1 juku 178 130_36000 140 32000 NA NA
## 2 kati 173 NA_NA 170 54000 120 25000
## 3 mati 175 140_32000 150 45000 90 25000
tu=t2
for(nr in 1:3){
tu=unite(tu, UQ(paste("kuu", nr, sep="")), paste("kuu", nr, "aeg",sep=""), paste("kuu", nr, "summa", sep=""))
}
tu
## # A tibble: 3 x 4
## kasutajanimi kuu1 kuu2 kuu3
## * <chr> <chr> <chr> <chr>
## 1 juku 130_36000 140_32000 NA_NA
## 2 kati NA_NA 170_54000 120_25000
## 3 mati 140_32000 150_45000 90_25000
gather(tu, kuu, andmed, -kasutajanimi)
## # A tibble: 9 x 3
## kasutajanimi kuu andmed
## <chr> <chr> <chr>
## 1 juku kuu1 130_36000
## 2 kati kuu1 NA_NA
## 3 mati kuu1 140_32000
## 4 juku kuu2 140_32000
## 5 kati kuu2 170_54000
## 6 mati kuu2 150_45000
## 7 juku kuu3 NA_NA
## 8 kati kuu3 120_25000
## 9 mati kuu3 90_25000
tu %>% gather(kuu, andmed, -kasutajanimi)
## # A tibble: 9 x 3
## kasutajanimi kuu andmed
## <chr> <chr> <chr>
## 1 juku kuu1 130_36000
## 2 kati kuu1 NA_NA
## 3 mati kuu1 140_32000
## 4 juku kuu2 140_32000
## 5 kati kuu2 170_54000
## 6 mati kuu2 150_45000
## 7 juku kuu3 NA_NA
## 8 kati kuu3 120_25000
## 9 mati kuu3 90_25000
gather(tu, kuu, andmed, -kasutajanimi) %>% separate(andmed, c("tunnid", "summa"), convert = TRUE) %>%
complete(tunnid)
## # A tibble: 7 x 4
## tunnid kasutajanimi kuu summa
## <int> <chr> <chr> <int>
## 1 90 mati kuu3 25000
## 2 120 kati kuu3 25000
## 3 130 juku kuu1 36000
## 4 140 mati kuu1 32000
## 5 140 juku kuu2 32000
## 6 150 mati kuu2 45000
## 7 170 kati kuu2 54000
tpikk=gather(tu, kuu, andmed, -kasutajanimi) %>% separate(andmed, c("tunnid", "summa"), convert = TRUE) %>%
complete(tunnid)
tpikk
## # A tibble: 7 x 4
## tunnid kasutajanimi kuu summa
## <int> <chr> <chr> <int>
## 1 90 mati kuu3 25000
## 2 120 kati kuu3 25000
## 3 130 juku kuu1 36000
## 4 140 mati kuu1 32000
## 5 140 juku kuu2 32000
## 6 150 mati kuu2 45000
## 7 170 kati kuu2 54000
ajad
## # A tibble: 9 x 3
## kasutajanimi aeg kuunr
## <chr> <int> <chr>
## 1 juku 130 1
## 2 kati NA 1
## 3 mati 140 1
## 4 juku 140 2
## 5 kati 170 2
## 6 mati 150 2
## 7 juku NA 3
## 8 kati 120 3
## 9 mati 90 3
spread(ajad, kuunr, aeg)
## # A tibble: 3 x 4
## kasutajanimi `1` `2` `3`
## * <chr> <int> <int> <int>
## 1 juku 130 140 NA
## 2 kati NA 170 120
## 3 mati 140 150 90
spread(ajad, kuunr, aeg, fill = -1, sep = "k")
## # A tibble: 3 x 4
## kasutajanimi kuunrk1 kuunrk2 kuunrk3
## * <chr> <dbl> <dbl> <dbl>
## 1 juku 130 140 -1
## 2 kati -1 170 120
## 3 mati 140 150 90