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