# Začneme iniciací prostředí.
library(tidyverse)
# pokud soubory neexistují lokálně - stahnout!
if (!file.exists('./data/potraviny.csv')) {
curl::curl_download("https://www.jla-data.net/sample/R4SU-potraviny.csv",
"./data/potraviny.csv")
}
# lokální soubor načíst
potraviny_csv <- readr::read_csv2("./data/potraviny.csv")
Základní přehled
Pro mnohé uživatele Excelu obrovský problém erka: data nejsou vidět!
Čtyři dobré funkce pro základní přehled jsou:
View()
ukáže interaktivně v rámci RStudia – tedy ne zde, v textu – náhled na data (pozor – uvidíte najednou kolem dvaceti řádků z celkových sto osmi tisíc)head()
ukazuje prvních šest řádků (jejím doplňkem jetail()
na posledních šest řádků)summary()
ukazuje výčet sloupců a pro číselné hodnoty základní popisnou statistiku (minimum, maximum, kvartily a medián)glimpse()
ukáže počet řádků, seznam sloupců a tolik hodnot, kolik se vejde na šířku stránky
head(potraviny_csv)
## # A tibble: 6 x 11
## idhod hodnota stapro_kod reprcen_cis reprcen_kod obdobiod obdobido
## <dbl> <dbl> <dbl> <dbl> <chr> <date> <date>
## 1 7.70e8 21.4 6137 503 0111101 2006-01-02 2006-01-08
## 2 7.70e8 21.4 6137 503 0111101 2006-01-09 2006-01-15
## 3 7.70e8 21.5 6137 503 0111101 2006-01-16 2006-01-22
## 4 7.70e8 21.4 6137 503 0111101 2006-01-23 2006-01-29
## 5 7.70e8 21.4 6137 503 0111101 2006-01-30 2006-02-05
## 6 7.70e8 21.3 6137 503 0111101 2006-02-06 2006-02-12
## # … with 4 more variables: uzemi_cis <dbl>, uzemi_kod <dbl>, uzemi_txt <chr>,
## # reprcen_txt <chr>
summary(potraviny_csv) # základní popisná statistika (min, max, kvartily) pro číselné sloupce
## idhod hodnota stapro_kod reprcen_cis
## Min. :770138308 Min. : 4.30 Min. :6137 Min. :503
## 1st Qu.:770165879 1st Qu.: 17.20 1st Qu.:6137 1st Qu.:503
## Median :770193983 Median : 30.57 Median :6137 Median :503
## Mean :770786077 Mean : 50.45 Mean :6137 Mean :503
## 3rd Qu.:770222136 3rd Qu.: 71.10 3rd Qu.:6137 3rd Qu.:503
## Max. :801137046 Max. :249.72 Max. :6137 Max. :503
## reprcen_kod obdobiod obdobido uzemi_cis
## Length:108249 Min. :2006-01-02 Min. :2006-01-08 Min. : 97.0
## Class :character 1st Qu.:2007-06-11 1st Qu.:2007-06-17 1st Qu.:100.0
## Mode :character Median :2009-01-05 Median :2009-01-11 Median :100.0
## Mean :2010-06-04 Mean :2010-06-10 Mean : 99.8
## 3rd Qu.:2013-02-11 3rd Qu.:2013-02-17 3rd Qu.:100.0
## Max. :2018-12-10 Max. :2018-12-16 Max. :100.0
## uzemi_kod uzemi_txt reprcen_txt
## Min. : 19 Length:108249 Length:108249
## 1st Qu.:3034 Class :character Class :character
## Median :3077 Mode :character Mode :character
## Mean :2875
## 3rd Qu.:3115
## Max. :3140
glimpse(potraviny_csv) # počet řádků, výčet sloupců, "ochutnávka" hodnot
## Rows: 108,249
## Columns: 11
## $ idhod <dbl> 770241512, 770242182, 770243168, 770243839, 770244763, 77…
## $ hodnota <dbl> 21.35, 21.43, 21.46, 21.45, 21.39, 21.28, 21.48, 21.37, 2…
## $ stapro_kod <dbl> 6137, 6137, 6137, 6137, 6137, 6137, 6137, 6137, 6137, 613…
## $ reprcen_cis <dbl> 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 50…
## $ reprcen_kod <chr> "0111101", "0111101", "0111101", "0111101", "0111101", "0…
## $ obdobiod <date> 2006-01-02, 2006-01-09, 2006-01-16, 2006-01-23, 2006-01-…
## $ obdobido <date> 2006-01-08, 2006-01-15, 2006-01-22, 2006-01-29, 2006-02-…
## $ uzemi_cis <dbl> 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 9…
## $ uzemi_kod <dbl> 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 1…
## $ uzemi_txt <chr> "Česká republika", "Česká republika", "Česká republika", …
## $ reprcen_txt <chr> "Rýže loupaná dlouhozrnná [1 kg]", "Rýže loupaná dlouhozr…
Úvodní orientace v datech
nrow()
počet řádků data framulength()
délka vektoru (počet hodnot)
unique()
výčet unikátních hodnot vektorumean()
průměr hodnot vektorusum()
součet hodnot vektoru
nrow(potraviny_csv) # počet řádků data framu potraviny_csv
## [1] 108249
length(potraviny_csv$reprcen_txt) # délka vektoru cenových reprezentantů
## [1] 108249
unique(potraviny_csv$reprcen_txt) # unikátní hodnoty vektoru cenových reprezentantů
## [1] "Rýže loupaná dlouhozrnná [1 kg]"
## [2] "Pšeničná mouka hladká [1 kg]"
## [3] "Chléb konzumní kmínový [1 kg]"
## [4] "Pečivo pšeničné bílé [1 kg]"
## [5] "Těstoviny vaječné [1 kg]"
## [6] "Hovězí maso zadní bez kosti [1 kg]"
## [7] "Vepřová pečeně s kostí [1 kg]"
## [8] "Kuřata kuchaná celá [1 kg]"
## [9] "Šunkový salám [1 kg]"
## [10] "Mléko polotučné pasterované [1 l]"
## [11] "Jogurt bílý netučný [150 g]"
## [12] "Eidamská cihla [1 kg]"
## [13] "Vejce slepičí čerstvá [10 ks]"
## [14] "Máslo [1 kg]"
## [15] "Rostlinný roztíratelný tuk [1 kg]"
## [16] "Pomeranče [1 kg]"
## [17] "Banány žluté [1 kg]"
## [18] "Jablka konzumní [1 kg]"
## [19] "Rajská jablka červená kulatá [1 kg]"
## [20] "Papriky [1 kg]"
## [21] "Mrkev [1 kg]"
## [22] "Konzumní brambory [1 kg]"
## [23] "Cukr krystalový [1 kg]"
## [24] "Přírodní minerální voda uhličitá [1 l]"
## [25] "Jakostní víno bílé [0,75 l]"
## [26] "Pivo výčepní, světlé, lahvové [0,5 l]"
## [27] "Kapr živý [1 kg]"
mean(potraviny_csv$hodnota) # průměrná cena (napříč všemi potravinami, a tedy nesmyslná částka)
## [1] 50.44838
sum(unique(potraviny_csv$uzemi_kod)) # součet unikátních hodnot číselníku území (zcela nesmyslná hodnota)
## [1] 43130
Manipulace s data framem – tidyverse / dplyr
V rámci tidyverse
představuje dplyr
hlavní knihovnu pro manipulaci s tabulkovými daty. Je postaven na konceptu “sloves”, která vykonávají určitou činnost nad data framem.
Důležitý koncept představuje pajpa (pipe) %>%
. Znamená posunutí operátoru na první argument následující funkce. Na první pohled složité, ale ve skutečnosti velmi funkční. Do hovorového jazyka se dobře překládá jako “a pak…”.
Pro vložení pajpy můžeme použít klávesovou zkratku Ctrl + Shift + m (což je odkaz na package magrittr
ve kterém byla pajpa prvně představena).
library(lubridate) # operace s datumy
banany <- potraviny_csv %>% # vytvoříme banány tak, že vezmeme tabulku potravin, a pak...
filter(reprcen_txt == "Banány žluté [1 kg]") %>% # .. nastavíme filtr podle hodnoty, a pak...
group_by(rok = year(obdobido)) %>% #... seskupíme podle roku; year() je v lubridate, a pak...
summarise(cena_bananu = mean(hodnota)) # ... vytvoříme sloupec s průměrnou roční cenou
banany # ukázat banány...
## # A tibble: 13 x 2
## rok cena_bananu
## <dbl> <dbl>
## 1 2006 27.3
## 2 2007 30.8
## 3 2008 30.6
## 4 2009 30.6
## 5 2010 27.4
## 6 2011 27.0
## 7 2012 31.0
## 8 2013 31.8
## 9 2014 31.6
## 10 2015 31.9
## 11 2016 31.7
## 12 2017 31.1
## 13 2018 29.3
Na 4 řádcích kódu jsme provedli redukci ze 108 tisíc řádků data framu na 13.
Důležitý komentář: vytvořili jsme nový datový objekt (banany
) ale původní potraviny_csv
se nezměnil (a už vůbec se nezměnila hodnota podkladového souboru potraviny.csv
na disku).
Důležité slovesa z dplyr
select()
vybere podle názvu určitý sloupec (nebo sloupce, když je argumentem vektor)filter()
omezí data frame pouze na řádky, které splňují podmínku (argumentem je výraz, který lze vyhodnotit jako TRUE / FALSE)mutate()
vytvoří nový sloupec ze stávajícího (či stávajících)group_by()
seskupí data frame podle hodnot jednoho sloupce (nebo více sloupců, když je argumentem vektor)summarise()
vytvoří na data framu seskupeném pomocígroup_by()
sumární sloupec, a zahodí ostatní (kromě nového a seskupujících sloupců)
potraviny_csv %>% # vezmeme tabulku potravin, a pak...
select(c("uzemi_txt", "obdobiod")) %>% # .. vybereme sloupce uzemi_txt a obdobiod, a pak...
head() # ...ukážeme prvních 6 řádků
## # A tibble: 6 x 2
## uzemi_txt obdobiod
## <chr> <date>
## 1 Česká republika 2006-01-02
## 2 Česká republika 2006-01-09
## 3 Česká republika 2006-01-16
## 4 Česká republika 2006-01-23
## 5 Česká republika 2006-01-30
## 6 Česká republika 2006-02-06
banany %>% # vezmeme tabulku ceny banánů po letech, a pak...
filter(rok >= 2000 & cena_bananu < 30) # ...vybereme hodnoty od roku 2000 a dále, kdy bylo kilo banánů do 30 Kč
## # A tibble: 4 x 2
## rok cena_bananu
## <dbl> <dbl>
## 1 2006 27.3
## 2 2010 27.4
## 3 2011 27.0
## 4 2018 29.3
banany %>% # vezmeme tabulku ceny banánů po letech, a pak...
mutate(cena = ifelse(cena_bananu < 30, "nízká", "vysoká")) # ...vytvoříme novou kategorickou proměnnou podle ceny
## # A tibble: 13 x 3
## rok cena_bananu cena
## <dbl> <dbl> <chr>
## 1 2006 27.3 nízká
## 2 2007 30.8 vysoká
## 3 2008 30.6 vysoká
## 4 2009 30.6 vysoká
## 5 2010 27.4 nízká
## 6 2011 27.0 nízká
## 7 2012 31.0 vysoká
## 8 2013 31.8 vysoká
## 9 2014 31.6 vysoká
## 10 2015 31.9 vysoká
## 11 2016 31.7 vysoká
## 12 2017 31.1 vysoká
## 13 2018 29.3 nízká
Praktické zjednodušení představuje funkce count()
, která v jedním kroku provede seskupení (group_by()
) a spočítání hodnot.
potraviny_csv %>%
count(uzemi_txt)
## # A tibble: 15 x 2
## uzemi_txt n
## <chr> <int>
## 1 Česká republika 7217
## 2 Hlavní město Praha 7217
## 3 Jihočeský kraj 7217
## 4 Jihomoravský kraj 7217
## 5 Karlovarský kraj 7215
## 6 Kraj Vysočina 7217
## 7 Královéhradecký kraj 7217
## 8 Liberecký kraj 7216
## 9 Moravskoslezský kraj 7217
## 10 Olomoucký kraj 7217
## 11 Pardubický kraj 7214
## 12 Plzeňský kraj 7217
## 13 Středočeský kraj 7217
## 14 Ústecký kraj 7217
## 15 Zlínský kraj 7217
Normalizace a denormalizace – převod z “dlouhého” na “široký” formát
Často se setkáváme s potřebou převézt data z normalizovaného (“dlouhého” formátu – hodnoty pod sebou v řádcích s označením typu proměnné) do denormalizovaného (“širokého” formátu – hodnoty ve sloupcích vedle sebe) a nazpátek.
V rámci tidyverse
pro tento převod slouží funkce spread()
a gather()
; spread()
roztáhne dlouhá data do stran, a gather()
posbírá široká data pod sebe.
Při použití spread()
často získáme sloupce s názvy, které nevyhovují – například obsahují diakritiku, nebo mezery (nebo, jako v našem případě, obojí). Pro jejich přejmenování můžeme použít funkci colnames()
do které přiřadíme očekávaný vektor názvů.
# začneme vytvořením pomocného objektu alkohol
alkohol <- potraviny_csv %>% # alkohol vytvoříme tak, že vezmeme potraviny a pak...
filter(reprcen_txt %in% c("Jakostní víno bílé [0,75 l]", # vybereme pivo a víno, a pak...
"Pivo výčepní, světlé, lahvové [0,5 l]")) %>%
filter(uzemi_txt == "Česká republika") %>% # pouze celková čísla (bez regionů), a pak...
group_by(rok = lubridate::year(obdobiod), reprcen_txt) %>% # dopočteme rok, a pak...
summarise(prumer = mean(hodnota))
## `summarise()` regrouping output by 'rok' (override with `.groups` argument)
alkohol
## # A tibble: 17 x 3
## # Groups: rok [13]
## rok reprcen_txt prumer
## <dbl> <chr> <dbl>
## 1 2006 Pivo výčepní, světlé, lahvové [0,5 l] 8.45
## 2 2007 Pivo výčepní, světlé, lahvové [0,5 l] 8.51
## 3 2008 Pivo výčepní, světlé, lahvové [0,5 l] 8.97
## 4 2009 Pivo výčepní, světlé, lahvové [0,5 l] 9.18
## 5 2010 Pivo výčepní, světlé, lahvové [0,5 l] 9.89
## 6 2011 Pivo výčepní, světlé, lahvové [0,5 l] 10.1
## 7 2012 Pivo výčepní, světlé, lahvové [0,5 l] 10.2
## 8 2013 Pivo výčepní, světlé, lahvové [0,5 l] 10.5
## 9 2014 Pivo výčepní, světlé, lahvové [0,5 l] 10.6
## 10 2015 Jakostní víno bílé [0,75 l] 92.4
## 11 2015 Pivo výčepní, světlé, lahvové [0,5 l] 10.7
## 12 2016 Jakostní víno bílé [0,75 l] 94.7
## 13 2016 Pivo výčepní, světlé, lahvové [0,5 l] 11.2
## 14 2017 Jakostní víno bílé [0,75 l] 96.7
## 15 2017 Pivo výčepní, světlé, lahvové [0,5 l] 11.3
## 16 2018 Jakostní víno bílé [0,75 l] 100.
## 17 2018 Pivo výčepní, světlé, lahvové [0,5 l] 11.8
siroky <- alkohol %>% # vytvoříme objekt siroky tak, že vezmeme alkohol, a pak ...
spread(key = reprcen_txt, # key = názvy sloupců
value = prumer) # hodnoty pro řádky
glimpse(siroky) # alkohol roztažený do široka; místo chybějící ceny vína je NA
## Rows: 13
## Columns: 3
## Groups: rok [13]
## $ rok <dbl> 2006, 2007, 2008, 2009, 2010,…
## $ `Jakostní víno bílé [0,75 l]` <dbl> NA, NA, NA, NA, NA, NA, NA, N…
## $ `Pivo výčepní, světlé, lahvové [0,5 l]` <dbl> 8.448800, 8.509375, 8.966087,…
colnames(siroky) <- c("rok", "vino", "pivo") # bez mezer a bez diakritiky
glimpse(siroky) # takhle je to hezčí...
## Rows: 13
## Columns: 3
## Groups: rok [13]
## $ rok <dbl> 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016…
## $ vino <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, 92.42417, 94.65417, 96.69667…
## $ pivo <dbl> 8.448800, 8.509375, 8.966087, 9.184167, 9.890455, 10.052500, 10.…
uzky <- siroky %>% # vytvoříme objekt uzky tak že vezmeme objekt siroky, a pak...
gather(key = "potravina", # název nové proměnné pro bývalé sloupce
value = "cena", # název nové proměnné pro bývalé řádky
-rok, # hodnota sloupce, na který se posbírání neuplatní (proto mínus)
na.rm = T) # chybějící hodnoty (NAčka) potlačíme
uzky # jako původní alkohol, liší se jen názvy sloupců a setříděním
## # A tibble: 17 x 3
## # Groups: rok [13]
## rok potravina cena
## <dbl> <chr> <dbl>
## 1 2015 vino 92.4
## 2 2016 vino 94.7
## 3 2017 vino 96.7
## 4 2018 vino 100.
## 5 2006 pivo 8.45
## 6 2007 pivo 8.51
## 7 2008 pivo 8.97
## 8 2009 pivo 9.18
## 9 2010 pivo 9.89
## 10 2011 pivo 10.1
## 11 2012 pivo 10.2
## 12 2013 pivo 10.5
## 13 2014 pivo 10.6
## 14 2015 pivo 10.7
## 15 2016 pivo 11.2
## 16 2017 pivo 11.3
## 17 2018 pivo 11.8
Spojení data framů podle klíče
Klíčový úkol při práci s data framy je jejich propojování. V kontextu dplyr
package jde zejména o funkce left_join()
a inner_join()
, inspirované SQL funkcemi obdobných jmen.
left_join()
vrací všechny záznamy z levé strany, a k nim přidá ty záznamy z pravé strany, pro které je hodnota klíče shodná. Je zaručeno, že na levé straně nepřijdete o žádná data, ale může dojít ke zdvojení řádek v případě vícečetné shody. Z pravé strany se nemusí připojit všechny záznamy, a naopak ne všechny záznamy z levé strany musí najít svůj ekvivalent. V takovém případě bude místo hodnoty zpravaNA
.inner_join()
záznamy zafiltruje. Vrací pouze záznamy, které se vyskytují na obou stranách (tj. není zaručeno, že nepřijdete o záznamy).
mrkev <- potraviny_csv %>% # vytvoříme mrkev tak, že vezmeme tabulku potravin, a pak...
filter(reprcen_txt == "Mrkev [1 kg]") %>% # ... vybereme mrkev (jako prve banány), a pak...
group_by(rok = year(obdobido)) %>% #... seskupíme podle roku; year() je v lubridate, a pak...
summarise(cena_mrkve = mean(hodnota)) %>% # ... vytvoříme sloupec s průměrnou roční cenou, a pak...
filter(rok %% 2 == 1) #... vybereme pouze liché roky (zbytek po celočíselném dělení = 1)
mrkev # nakonec se na mrkev podíváme
## # A tibble: 6 x 2
## rok cena_mrkve
## <dbl> <dbl>
## 1 2007 14.2
## 2 2009 16.6
## 3 2011 16.4
## 4 2013 18.6
## 5 2015 20.8
## 6 2017 15.0
banany %>% # vezmeme banány, a pak...
left_join(mrkev, by = c("rok" = "rok")) # ...připojíme mrkev, a ukážeme všechny hodnoty
## # A tibble: 13 x 3
## rok cena_bananu cena_mrkve
## <dbl> <dbl> <dbl>
## 1 2006 27.3 NA
## 2 2007 30.8 14.2
## 3 2008 30.6 NA
## 4 2009 30.6 16.6
## 5 2010 27.4 NA
## 6 2011 27.0 16.4
## 7 2012 31.0 NA
## 8 2013 31.8 18.6
## 9 2014 31.6 NA
## 10 2015 31.9 20.8
## 11 2016 31.7 NA
## 12 2017 31.1 15.0
## 13 2018 29.3 NA
banany %>% # vezmeme banány, a pak...
inner_join(mrkev, by = c("rok" = "rok")) # ...připojíme mrkev, a ukážeme pouze hodnoty shodné
## # A tibble: 6 x 3
## rok cena_bananu cena_mrkve
## <dbl> <dbl> <dbl>
## 1 2007 30.8 14.2
## 2 2009 30.6 16.6
## 3 2011 27.0 16.4
## 4 2013 31.8 18.6
## 5 2015 31.9 20.8
## 6 2017 31.1 15.0
Spojení dvou data framů
Dva data framy jde spojit voláním:
rbind()
= spojení po řádcích (pod sebe)cbind()
= spojení po sloupcích (vedle sebe)
Při spojení po řádcích je potřeba, aby oba data framy měly stejný počet sloupců (řádky se mohou lišit) stejného typu.
Při spojení po sloupcích je třeba dát pozor na recyklaci vektorů (při nestejném počtu řádků se opakují hodnoty).
kockopes <- rbind(head(potraviny_csv), # napřed hlava = prvních 6 řádků
tail(potraviny_csv)) # potom ocas = posledních 6 řádků
kockopes # 12 (6+6) řádků; 11 = původní počet sloupců
## # A tibble: 12 x 11
## idhod hodnota stapro_kod reprcen_cis reprcen_kod obdobiod obdobido
## <dbl> <dbl> <dbl> <dbl> <chr> <date> <date>
## 1 7.70e8 21.4 6137 503 0111101 2006-01-02 2006-01-08
## 2 7.70e8 21.4 6137 503 0111101 2006-01-09 2006-01-15
## 3 7.70e8 21.5 6137 503 0111101 2006-01-16 2006-01-22
## 4 7.70e8 21.4 6137 503 0111101 2006-01-23 2006-01-29
## 5 7.70e8 21.4 6137 503 0111101 2006-01-30 2006-02-05
## 6 7.70e8 21.3 6137 503 0111101 2006-02-06 2006-02-12
## 7 7.70e8 91.7 6137 503 2000001 2013-12-09 2013-12-15
## 8 7.70e8 83.3 6137 503 2000001 2014-12-08 2014-12-14
## 9 7.70e8 84.8 6137 503 2000001 2015-12-14 2015-12-20
## 10 7.70e8 84.8 6137 503 2000001 2016-12-12 2016-12-18
## 11 7.70e8 87.1 6137 503 2000001 2017-12-11 2017-12-17
## 12 8.01e8 92.8 6137 503 2000001 2018-12-10 2018-12-16
## # … with 4 more variables: uzemi_cis <dbl>, uzemi_kod <dbl>, uzemi_txt <chr>,
## # reprcen_txt <chr>
kockopes <- cbind(head(potraviny_csv), # napřed hlava = prvních 6 řádků
tail(potraviny_csv)) # potom ocas = posledních 6 řádků
kockopes # 6 = původní počet řádků; 22 (11+ 11) sloupců
## idhod hodnota stapro_kod reprcen_cis reprcen_kod obdobiod obdobido
## 1 770241512 21.35 6137 503 0111101 2006-01-02 2006-01-08
## 2 770242182 21.43 6137 503 0111101 2006-01-09 2006-01-15
## 3 770243168 21.46 6137 503 0111101 2006-01-16 2006-01-22
## 4 770243839 21.45 6137 503 0111101 2006-01-23 2006-01-29
## 5 770244763 21.39 6137 503 0111101 2006-01-30 2006-02-05
## 6 770245376 21.28 6137 503 0111101 2006-02-06 2006-02-12
## uzemi_cis uzemi_kod uzemi_txt reprcen_txt idhod
## 1 97 19 Česká republika Rýže loupaná dlouhozrnná [1 kg] 770159360
## 2 97 19 Česká republika Rýže loupaná dlouhozrnná [1 kg] 770154781
## 3 97 19 Česká republika Rýže loupaná dlouhozrnná [1 kg] 770147525
## 4 97 19 Česká republika Rýže loupaná dlouhozrnná [1 kg] 770143824
## 5 97 19 Česká republika Rýže loupaná dlouhozrnná [1 kg] 770139717
## 6 97 19 Česká republika Rýže loupaná dlouhozrnná [1 kg] 801136986
## hodnota stapro_kod reprcen_cis reprcen_kod obdobiod obdobido uzemi_cis
## 1 91.67 6137 503 2000001 2013-12-09 2013-12-15 100
## 2 83.33 6137 503 2000001 2014-12-08 2014-12-14 100
## 3 84.85 6137 503 2000001 2015-12-14 2015-12-20 100
## 4 84.77 6137 503 2000001 2016-12-12 2016-12-18 100
## 5 87.10 6137 503 2000001 2017-12-11 2017-12-17 100
## 6 92.79 6137 503 2000001 2018-12-10 2018-12-16 100
## uzemi_kod uzemi_txt reprcen_txt
## 1 3140 Moravskoslezský kraj Kapr živý [1 kg]
## 2 3140 Moravskoslezský kraj Kapr živý [1 kg]
## 3 3140 Moravskoslezský kraj Kapr živý [1 kg]
## 4 3140 Moravskoslezský kraj Kapr živý [1 kg]
## 5 3140 Moravskoslezský kraj Kapr živý [1 kg]
## 6 3140 Moravskoslezský kraj Kapr živý [1 kg]
Další čtení / reference
- Data Transformation cheatsheet od RStudia
- package dplyr dokumentace
- package tidyr dokumentace
- package dbplyr dokumentace
- package lubridate dokumentace
- Data Transformation kapitola R for Data Science