# 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 je tail() 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 framu
  • length() délka vektoru (počet hodnot)
  • unique() výčet unikátních hodnot vektoru
  • mean() průměr hodnot vektoru
  • sum() 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 zprava NA.
  • 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