{"id":76291,"date":"2020-04-01T13:42:28","date_gmt":"2020-04-01T11:42:28","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider"},"modified":"2020-04-01T13:42:28","modified_gmt":"2020-04-01T11:42:28","slug":"r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider","title":{"rendered":"R bal\u00edk tidyr a jeho nov\u00e9 funkcie pivot_longer a pivot_wider","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bal\u00edk <strong>tidyr<\/strong> je s\u00fa\u010das\u0165ou jedn\u00e9ho z najpopul\u00e1rnej\u0161\u00edch kni\u017en\u00edc v jazyku R \u2014 <strong>tidyverse<\/strong>.<br \/>\nHlavn\u00fdm \u00fa\u010delom bal\u00edka je previes\u0165 d\u00e1ta do upraven\u00e9ho form\u00e1tu.<\/p>\n<p><\/p>\n<p>Na Habr\u00e9 u\u017e existuje <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/248741\/\">publikovanie<\/a><\/noindex> venovan\u00e1 tomuto bal\u00edku, ale je z roku 2015. Chcem sa venova\u0165 najaktu\u00e1lnej\u0161\u00edm zmen\u00e1m, o ktor\u00fdch pred nieko\u013ek\u00fdmi d\u0148ami informoval jeho autor Hadley Wickham.<\/p>\n<p>\n<img decoding=\"async\" alt=\"R bal\u00edk tidyr a jeho nov\u00e9 funkcie pivot_longer a pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/a290263b63aaea3db70e83a1ec411415.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p><b>SJK<\/b>: Bud\u00fa funkcie gather() a spread() pova\u017eovan\u00e9 za zastaran\u00e9?<\/p>\n<p><b>Hadley Wickham<\/b>: V ur\u010ditom zmysle. Nebudeme odpor\u00fa\u010da\u0165 pou\u017e\u00edvanie t\u00fdchto funkci\u00ed a opravova\u0165 chyby v nich, no st\u00e1le bud\u00fa pr\u00edtomn\u00e9 v bal\u00edku v s\u00fa\u010dasnom stave.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"soderzhanie\">Obsah<\/h2>\n<p><\/p>\n<p><em>Ak v\u00e1s zauj\u00edma anal\u00fdza d\u00e1t, mohli by v\u00e1s zauj\u00edma\u0165 moje <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/R4marketing\">telegram<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/R4marketing\/?sub_confirmation=1\">youtube<\/a><\/noindex> kan\u00e1ly. V\u00e4\u010d\u0161ina obsahu je zameran\u00e1 na jazyk R.<\/em><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#koncepciya-tidydata\">Koncepcia TidyData<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#osnovnye-funkcii-vhodyaschie-v-paket-tydir\">Hlavn\u00e9 funkcie zahrnut\u00e9 v bal\u00edku tidyr<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#novaya-koncepciya-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy-i-naoborot\">Nov\u00e1 koncepcia transform\u00e1cie d\u00e1t z \u0161irok\u00e9ho form\u00e1tu na dlh\u00fd a naopak<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/ustnovka-naibolee-aktualnoy-versii-tidyr-0839000\">In\u0161tal\u00e1cia najaktu\u00e1lnej\u0161ej verzie tidyr 0.8.3.9000<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#perehod-na-novye-funkcii\">Prechod na nov\u00e9 funkcie<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#prostoy-primer-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy\">Jednoduch\u00fd pr\u00edklad transform\u00e1cie d\u00e1t z \u0161irok\u00e9ho form\u00e1tu do dlh\u00e9ho<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#specifikacii\">\u0160pecifik\u00e1cie<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#specifikaciya-s-ispolzovaniem-neskolkih-znacheniyvalue\">\u0160pecifik\u00e1cia s pou\u017eit\u00edm viacer\u00fdch hodn\u00f4t (.value)<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#preobrazovanie-data-freymov-iz-dlinnogo-formata-k-shirokomu\">Transform\u00e1cia d\u00e1tov\u00fdch r\u00e1mcov z dlh\u00e9ho form\u00e1tu na \u0161irok\u00fd<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#prosteyshiy-primer-privedeniya-tablicy-k-shirokomu-formatu\">Najjednoduch\u0161\u00ed pr\u00edklad prevodu tabu\u013eky na \u0161irok\u00fd form\u00e1t<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#generaciya-imeni-stolbca-iz-neskolkih-ishodnyh-peremennyh\">Generovanie n\u00e1zvu st\u013apca z viacer\u00fdch p\u00f4vodn\u00fdch premenn\u00fdch<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#neskolko-prodvinutyh-primerov-raboty-s-novoy-koncepciey-tidyr\">Nieko\u013eko pokro\u010dil\u00fdch pr\u00edkladov pr\u00e1ce s novou koncepciou tidyr<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#privedenie-dannyh-k-akkuratnomu-vidu-na-primere-nabora-dannyh-o-perepisi-dohoda-i-arendnoy-platy-v-ssha\">Upravenie d\u00e1t na pr\u00edklade s\u00faboru o pr\u00edjmoch a n\u00e1jme v USA<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#vsemirnyy-bank\">Svetov\u00e1 banka<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#spisok-kontaktov\">Kontaktn\u00fd zoznam<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#zaklyuchenie\">Z\u00e1ver<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"koncepciya-tidydata\">Koncepcia TidyData<\/h2>\n<p><\/p>\n<p>Cie\u013e <strong>tidyr<\/strong> \u2014 pom\u00f4c\u0165 v\u00e1m upravi\u0165 d\u00e1ta do takzvan\u00e9ho upraven\u00e9ho form\u00e1tu. Upraven\u00e9 d\u00e1ta s\u00fa d\u00e1ta, kde: <\/p>\n<p><\/p>\n<ul>\n<li>Ka\u017ed\u00e1 premenn\u00e1 je v st\u013apci. <\/li>\n<li>Ka\u017ed\u00e9 pozorovanie je riadkom. <\/li>\n<li>Ka\u017ed\u00e1 hodnota je bunkou.<\/li>\n<\/ul>\n<p><\/p>\n<p>S d\u00e1tami, ktor\u00e9 s\u00fa upraven\u00e9 na tidy data, sa ove\u013ea jednoduch\u0161ie a pohodlnej\u0161ie pracuje pri anal\u00fdze.<\/p>\n<p><\/p>\n<h2 id=\"osnovnye-funkcii-vhodyaschie-v-paket-tidyr\">Hlavn\u00e9 funkcie zahrnut\u00e9 v bal\u00edku tidyr<\/h2>\n<p><\/p>\n<p>tidyr obsahuje mno\u017estvo funkci\u00ed ur\u010den\u00fdch na transform\u00e1ciu tabuliek:<\/p>\n<p><\/p>\n<ul>\n<li><code>fill()<\/code> \u2014 vyplnenie ch\u00fdbaj\u00facich hodn\u00f4t v st\u013apci predch\u00e1dzaj\u00facimi hodnotami;<\/li>\n<li><code>separate()<\/code> \u2014 rozdel\u00ed jedno pole na nieko\u013eko cez odde\u013eova\u010d;<\/li>\n<li><code>unite()<\/code> \u2014 vykon\u00e1va oper\u00e1ciu zl\u00fa\u010denia nieko\u013ek\u00fdch pol\u00ed do jedn\u00e9ho, \u010do je opa\u010dn\u00e9 k funkcii <code>separate()<\/code>;<\/li>\n<li><code>pivot_longer()<\/code> \u2014 funkcia, ktor\u00e1 transformuje d\u00e1ta z \u0161irok\u00e9ho form\u00e1tu do dlh\u00e9ho;<\/li>\n<li><code>pivot_wider()<\/code> \u2014 funkcia, ktor\u00e1 transformuje d\u00e1ta z dlh\u00e9ho form\u00e1tu do \u0161irok\u00e9ho. Oper\u00e1cia je opa\u010dn\u00e1 tej, ktor\u00fa vykon\u00e1va funkcia <code>pivot_longer()<\/code>.<\/li>\n<li><code>gather()<\/code><strong>zastaral\u00e1<\/strong> \u2014 funkcia, ktor\u00e1 transformuje d\u00e1ta z \u0161irok\u00e9ho form\u00e1tu do dlh\u00e9ho;<\/li>\n<li><code>spread()<\/code><strong>zastaral\u00e1<\/strong> \u2014 funkcia, ktor\u00e1 transformuje d\u00e1ta z dlh\u00e9ho form\u00e1tu do \u0161irok\u00e9ho. Oper\u00e1cia je opa\u010dn\u00e1 tej, ktor\u00fa vykon\u00e1va funkcia <code>gather()<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"novaya-koncepciya-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy-i-naoborot\">Nov\u00e1 koncepcia transform\u00e1cie d\u00e1t z \u0161irok\u00e9ho form\u00e1tu na dlh\u00fd a naopak<\/h2>\n<p><\/p>\n<p>Predt\u00fdm sa na tento typ transform\u00e1cie pou\u017e\u00edvali funkcie <code>gather()<\/code> a <code>spread()<\/code>. Po rokoch existencie t\u00fdchto funkci\u00ed sa uk\u00e1zalo, \u017ee pre v\u00e4\u010d\u0161inu pou\u017e\u00edvate\u013eov, vr\u00e1tane autora bal\u00edka, n\u00e1zvy t\u00fdchto funkci\u00ed a ich argumentov boli dos\u0165 nejasn\u00e9 a sp\u00f4sobili \u0165a\u017ekosti pri ich vyh\u013ead\u00e1van\u00ed a pochopen\u00ed toho, ktor\u00e1 z t\u00fdchto funkci\u00ed prev\u00e1dza d\u00e1tov\u00fd r\u00e1mec zo \u0161irok\u00e9ho do dlh\u00e9ho form\u00e1tu a naopak.<\/p>\n<p><\/p>\n<p>V s\u00favislosti s t\u00fdm do <strong>tidyr<\/strong> boli pridan\u00e9 dve nov\u00e9, d\u00f4le\u017eit\u00e9 funkcie, ktor\u00e9 s\u00fa ur\u010den\u00e9 na transform\u00e1ciu d\u00e1tov\u00fdch r\u00e1mcov.<\/p>\n<p><\/p>\n<p>Nov\u00e9 funkcie <code>pivot_longer()<\/code> a <code>pivot_wider()<\/code> boli vytvoren\u00e9 pod vplyvom niektor\u00fdch funkci\u00ed z bal\u00edka <strong>cdata<\/strong>, vytvoren\u00e9ho Johnom Mountom a Ninou Zoome\u013e.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-naibolee-aktualnoy-versii-tidyr-0839000\">In\u0161tal\u00e1cia najaktu\u00e1lnej\u0161ej verzie tidyr 0.8.3.9000<\/h3>\n<p><\/p>\n<p>Na in\u0161tal\u00e1ciu novej, najaktu\u00e1lnej\u0161ej verzie bal\u00edka <strong>tidyr<\/strong> <em>0.8.3.9000<\/em>, v ktorej s\u00fa k dispoz\u00edcii nov\u00e9 funkcie, pou\u017eite nasleduj\u00faci k\u00f3d.<\/p>\n<p><\/p>\n<p><code>devtools::install_github(\"tidyverse\/tidyr\")<\/code><\/p>\n<p><\/p>\n<p>V \u010dase p\u00edsania tohto \u010dl\u00e1nku s\u00fa tieto funkcie dostupn\u00e9 iba v dev verzii bal\u00edka na GitHub.<\/p>\n<p><\/p>\n<h3 id=\"perehod-na-novye-funkcii\">Prechod na nov\u00e9 funkcie<\/h3>\n<p><\/p>\n<p>V skuto\u010dnosti nie je \u0165a\u017ek\u00e9 previes\u0165 star\u00e9 skripty na pr\u00e1cu s nov\u00fdmi funkciami, na v\u00e4\u010d\u0161ie pochopenie vezmem pr\u00edklad z dokument\u00e1cie star\u00fdch funkci\u00ed a uk\u00e1\u017eem, ako sa tieto oper\u00e1cie vykon\u00e1vaj\u00fa pomocou nov\u00fdch <code>pivot_*()<\/code> funkci\u00ed.<\/p>\n<p><\/p>\n<p>Transform\u00e1cia \u0161irok\u00e9ho form\u00e1tu na dlh\u00fd.<\/p>\n<p>\n<b class=\"spoiler_title\">Pr\u00edklad k\u00f3du z dokument\u00e1cie funkcie gather<\/b><\/p>\n<pre><code class=\"plaintext\"># example\nlibrary(dplyr)\nstocks &lt;- data.frame(\n  time = as.Date('2009-01-01') + 0:9,\n  X = rnorm(10, 0, 1),\n  Y = rnorm(10, 0, 2),\n  Z = rnorm(10, 0, 4)\n)\n\n# old\nstocks_gather &lt;- stocks %&gt;% gather(key   = stock, \n                                   value = price, \n                                   -time)\n\n# new\nstocks_long   &lt;- stocks %&gt;% pivot_longer(cols      = -time, \n                                       names_to  = &quot;stock&quot;, \n                                       values_to = &quot;price&quot;)\n<\/code><\/pre>\n<p><\/p>\n<p>Transform\u00e1cia dlh\u00e9ho form\u00e1tu na \u0161irok\u00fd.<\/p>\n<p>\n<b class=\"spoiler_title\">Pr\u00edklad k\u00f3du z dokument\u00e1cie funkcie spread<\/b><\/p>\n<pre><code class=\"plaintext\"># old\nstocks_spread &lt;- stocks_gather %&gt;% spread(key = stock, \n                                          value = price) \n\n# new \nstock_wide    &lt;- stocks_long %&gt;% pivot_wider(names_from  = &quot;stock&quot;,\n                                            values_from = &quot;price&quot;)\n<\/code><\/pre>\n<p><\/p>\n<p>Ke\u010f\u017ee v uveden\u00fdch vy\u0161\u0161ie pr\u00edkladoch pr\u00e1ce s <code>pivot_longer()<\/code> a <code>pivot_wider()<\/code>, v p\u00f4vodnej tabu\u013eke <em>stocks<\/em> nie s\u00fa st\u013apce uveden\u00e9 v argumentoch <em>names_to<\/em> a <em>values_to<\/em> ich n\u00e1zvy je potrebn\u00e9 uv\u00e1dza\u0165 v \u00favodzovk\u00e1ch.<\/p>\n<p><\/p>\n<p>Tabu\u013eka, s pomocou ktorej v\u00e1m najjednoduch\u0161ie pom\u00f4\u017ee pochopi\u0165, ako prejs\u0165 na nov\u00fa koncepciu <strong>tidyr<\/strong>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R bal\u00edk tidyr a jeho nov\u00e9 funkcie pivot_longer a pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/fe598b5cd152088a2f1b23b846d212e9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"primechanie-ot-avtora\">Pozn\u00e1mka od autora<\/h2>\n<p><\/p>\n<blockquote><p>Cel\u00fd nasleduj\u00faci text je adapt\u00edvny, povedal by som vo\u013en\u00fd preklad <noindex><a rel=\"nofollow\" href=\"https:\/\/tidyr.tidyverse.org\/dev\/articles\/pivot.html\">viniet<\/a><\/noindex> z ofici\u00e1lnej str\u00e1nky kni\u017enice tidyverse.<\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"prostoy-primer-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy\">Jednoduch\u00fd pr\u00edklad transform\u00e1cie d\u00e1t z \u0161irok\u00e9ho form\u00e1tu do dlh\u00e9ho<\/h2>\n<p><\/p>\n<p><code>pivot_longer ()<\/code> \u2014 rob\u00ed d\u00e1tov\u00e9 sady dlh\u0161ie, zmen\u0161uje po\u010det st\u013apcov a zvy\u0161uje po\u010det riadkov.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R bal\u00edk tidyr a jeho nov\u00e9 funkcie pivot_longer a pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/fc88b99f2fecdcdaa6179d2e7d29e59d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na vykonanie pr\u00edkladov, ktor\u00e9 s\u00fa uveden\u00e9 v \u010dl\u00e1nku, je najprv potrebn\u00e9 pripoji\u0165 potrebn\u00e9 bal\u00edky:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">library(tidyr)\nlibrary(dplyr)\nlibrary(readr)<\/code><\/pre>\n<p><\/p>\n<p>Predpokladajme, \u017ee m\u00e1me tabu\u013eku s v\u00fdsledkami prieskumu, v ktorom (okrem in\u00e9ho) sa p\u00fdtali \u013eud\u00ed na ich n\u00e1bo\u017eenstvo a ro\u010dn\u00fd pr\u00edjem:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 18 x 11\n#&gt;    religion `&lt;$10k` `$10-20k` `$20-30k` `$30-40k` `$40-50k` `$50-75k`\n#&gt;    &lt;chr&gt;      &lt;dbl&gt;     &lt;dbl&gt;     &lt;dbl&gt;     &lt;dbl&gt;     &lt;dbl&gt;     &lt;dbl&gt;\n#&gt;  1 Agnostic      27        34        60        81        76       137\n#&gt;  2 Atheist       12        27        37        52        35        70\n#&gt;  3 Buddhist      27        21        30        34        33        58\n#&gt;  4 Catholic     418       617       732       670       638      1116\n#&gt;  5 Don\u2019t k\u2026      15        14        15        11        10        35\n#&gt;  6 Evangel\u2026     575       869      1064       982       881      1486\n#&gt;  7 Hindu          1         9         7         9        11        34\n#&gt;  8 Histori\u2026     228       244       236       238       197       223\n#&gt;  9 Jehovah\u2026      20        27        24        24        21        30\n#&gt; 10 Jewish        19        19        25        25        30        95\n#&gt; # \u2026 with 8 more rows, and 4 more variables: `$75-100k` &lt;dbl&gt;,\n#&gt; #   `$100-150k` &lt;dbl&gt;, `&gt;150k` &lt;dbl&gt;, `Don't know\/refused` &lt;dbl&gt;<\/code><\/pre>\n<p><\/p>\n<p>T\u00e1to tabu\u013eka obsahuje \u00fadaje o n\u00e1bo\u017eenstve respondentov v riadkoch, a \u00farove\u0148 pr\u00edjmu je rozdelen\u00e1 pod\u013ea n\u00e1zvov st\u013apcov. Po\u010det respondentov z ka\u017edej kateg\u00f3rie je ulo\u017een\u00fd v hodnot\u00e1ch buniek na prieseku n\u00e1bo\u017eenstva a \u00farovne pr\u00edjmu. Na to, aby sa tabu\u013eka upravila do spr\u00e1vneho, presn\u00e9ho form\u00e1tu, sta\u010d\u00ed pou\u017ei\u0165 <code>pivot_longer()<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">pew %&gt;% \n  pivot_longer(cols = -religion, names_to = \"income\", values_to = \"count\")<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">pew %&gt;% \n  pivot_longer(cols = -religion, names_to = \"income\", values_to = \"count\")\n#&gt; # A tibble: 180 x 3\n#&gt;    religion income             count\n#&gt;                      \n#&gt;  1 Agnostik   2 Agnostik 10-20 000            34\n#&gt;  3 Agnostik 20-30 000            60\n#&gt;  4 Agnostik 30-40 000            81\n#&gt;  5 Agnostik 40-50 000            76\n#&gt;  6 Agnostik 50-75 000           137\n#&gt;  7 Agnostik 75-100 000           122\n#&gt;  8 Agnostik 100-150 000          109\n#&gt;  9 Agnostik &gt;150 000             84\n#&gt; 10 Agnostik Neviem\/odmietol       96\n#&gt; # \u2026 s \u010fal\u0161\u00edmi 170 riadkami<\/code><\/pre>\n<p><\/p>\n<p>Argumenty funkcie <code>pivot_longer()<\/code><\/p>\n<p><\/p>\n<ul>\n<li>Prv\u00fd argument <em>cols<\/em>, opisuje, ktor\u00e9 st\u013apce je potrebn\u00e9 zl\u00fa\u010di\u0165. V tomto pr\u00edpade v\u0161etky st\u013apce okrem <em>time<\/em>.<\/li>\n<li>Argument <em>names_to<\/em> d\u00e1va n\u00e1zov premennej, ktor\u00e1 bude vytvoren\u00e1 z n\u00e1zvov st\u013apcov, ktor\u00e9 sme zl\u00fa\u010dili.<\/li>\n<li><em>values_to<\/em> d\u00e1va n\u00e1zov premennej, ktor\u00e1 bude vytvoren\u00e1 z \u00fadajov ulo\u017een\u00fdch v hodnot\u00e1ch buniek zl\u00fa\u010den\u00fdch st\u013apcov.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"specifikacii\">\u0160pecifik\u00e1cie<\/h2>\n<p><\/p>\n<p>Toto je nov\u00e1 funkcia bal\u00edka <strong>tidyr<\/strong>, ktor\u00e1 predt\u00fdm nebola dostupn\u00e1 pri pr\u00e1ci s zastaran\u00fdmi funkciami.<\/p>\n<p><\/p>\n<p>\u0160pecifik\u00e1cia je r\u00e1mec \u00fadajov, kde ka\u017ed\u00fd riadok zodpoved\u00e1 jedn\u00e9mu st\u013apcu v novom v\u00fdstupnom d\u00e1tovom r\u00e1mci a dvom \u0161peci\u00e1lnym st\u013apcom, ktor\u00e9 za\u010d\u00ednaj\u00fa s: <\/p>\n<p><\/p>\n<ul>\n<li><em>.name<\/em> obsahuje p\u00f4vodn\u00fd n\u00e1zov st\u013apca. <\/li>\n<li><em>.value<\/em> obsahuje n\u00e1zov st\u013apca, do ktor\u00e9ho bud\u00fa vstupova\u0165 hodnoty buniek. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ostatn\u00e9 st\u013apce \u0161pecifik\u00e1cie odr\u00e1\u017eaj\u00fa to, ako bude v novom st\u013apci zobrazen\u00fd n\u00e1zov zlu\u010dovan\u00fdch st\u013apcov z <em>.name<\/em>.<\/p>\n<p><\/p>\n<p>\u0160pecifik\u00e1cia popisuje metad\u00e1ta ulo\u017een\u00e9 v n\u00e1zve st\u013apca, s jedn\u00fdm riadkom pre ka\u017ed\u00fd st\u013apec a jedn\u00fdm st\u013apcom pre ka\u017ed\u00fa premenn\u00fa, ktor\u00e1 je zl\u00fa\u010den\u00e1 s n\u00e1zvom st\u013apca. Mo\u017eno sa tak\u00e9to definovanie zd\u00e1 zlo\u017eit\u00e9, ale po pre\u0161tudovan\u00ed nieko\u013ek\u00fdch pr\u00edkladov to bude omnoho jasnej\u0161ie.<\/p>\n<p><\/p>\n<p>Zmyslom \u0161pecifik\u00e1cie je, \u017ee m\u00f4\u017eete extrahova\u0165, meni\u0165 a definova\u0165 nov\u00e9 metad\u00e1ta pre transformovan\u00fd d\u00e1tov\u00fd r\u00e1mec.<\/p>\n<p><\/p>\n<p>Na pr\u00e1cu so \u0161pecifik\u00e1ciami pri transform\u00e1cii tabu\u013eky z \u0161irok\u00e9ho form\u00e1tu do dlh\u00e9ho sl\u00fa\u017ei funkcia <code>pivot_longer_spec()<\/code>.<\/p>\n<p><\/p>\n<p>Ako t\u00e1to funkcia funguje, berie ak\u00fdko\u013evek d\u00e1tov\u00fd r\u00e1mec a formuje jeho metad\u00e1ta sp\u00f4sobom pop\u00edsan\u00fdm vy\u0161\u0161ie. <\/p>\n<p><\/p>\n<p>Pre pr\u00edklad si zoberme s\u00fabor \u00fadajov who, ktor\u00fd je dod\u00e1van\u00fd spolu s bal\u00edkom. <strong>tidyr<\/strong>Tento s\u00fabor \u00fadajov obsahuje inform\u00e1cie poskytovan\u00e9 medzin\u00e1rodnou zdravotn\u00edckou organiz\u00e1ciou o v\u00fdskyte tuberkul\u00f3zy.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">who\n#&gt; # A tibble: 7,240 x 60\n#&gt;    country iso2  iso3   year new_sp_m014 new_sp_m1524 new_sp_m2534\n#&gt;        &amp; &amp;                       \n#&gt;  1 Afghan\u2026 AF    AFG    1980          NA           NA           NA\n#&gt;  2 Afghan\u2026 AF    AFG    1981          NA           NA           NA\n#&gt;  3 Afghan\u2026 AF    AFG    1982          NA           NA           NA\n#&gt;  4 Afghan\u2026 AF    AFG    1983          NA           NA           NA\n#&gt;  5 Afghan\u2026 AF    AFG    1984          NA           NA           NA\n#&gt;  6 Afghan\u2026 AF    AFG    1985          NA           NA           NA\n#&gt;  7 Afghan\u2026 AF    AFG    1986          NA           NA           NA\n#&gt;  8 Afghan\u2026 AF    AFG    1987          NA           NA           NA\n#&gt;  9 Afghan\u2026 AF    AFG    1988          NA           NA           NA\n#&gt; 10 Afghan\u2026 AF    AFG    1989          NA           NA           NA\n#&gt; # \u2026 with 7,230 more rows, and 53 more variables<\/code><\/pre>\n<p><\/p>\n<p>Vytvor\u00edme jeho \u0161pecifik\u00e1ciu.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec %\n  pivot_longer_spec(new_sp_m014:newrel_f65, values_to = \"count\")<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 56 x 3\n#&gt;    .name        .value name        \n#&gt;    &lt;chr&gt;        &lt;chr&gt;  &lt;chr&gt;       \n#&gt;  1 new_sp_m014  count  new_sp_m014 \n#&gt;  2 new_sp_m1524 count  new_sp_m1524\n#&gt;  3 new_sp_m2534 count  new_sp_m2534\n#&gt;  4 new_sp_m3544 count  new_sp_m3544\n#&gt;  5 new_sp_m4554 count  new_sp_m4554\n#&gt;  6 new_sp_m5564 count  new_sp_m5564\n#&gt;  7 new_sp_m65   count  new_sp_m65  \n#&gt;  8 new_sp_f014  count  new_sp_f014 \n#&gt;  9 new_sp_f1524 count  new_sp_f1524\n#&gt; 10 new_sp_f2534 count  new_sp_f2534\n#&gt; # \u2026 with 46 more rows<\/code><\/pre>\n<p><\/p>\n<p>Polia <em>country<\/em>, <em>iso2<\/em>, <em>iso3<\/em> u\u017e s\u00fa premenn\u00e9. Na\u0161ou \u00falohou je prevr\u00e1ti\u0165 st\u013apce s <em>new_sp_m014<\/em> o <em>newrel_f65<\/em>.<\/p>\n<p><\/p>\n<p>V n\u00e1zvoch t\u00fdchto st\u013apcov s\u00fa ulo\u017een\u00e9 nasleduj\u00face inform\u00e1cie:<\/p>\n<p><\/p>\n<ul>\n<li>Prefix <code>new_<\/code> nazna\u010duje, \u017ee st\u013apec obsahuje \u00fadaje o nov\u00fdch pr\u00edpadoch ochorenia tuberkul\u00f3zou, aktu\u00e1lny d\u00e1tov\u00fd r\u00e1mec obsahuje inform\u00e1cie iba o nov\u00fdch ochoreniach, preto tento prefix v aktu\u00e1lnom kontexte nem\u00e1 \u017eiaden v\u00fdznam.<\/li>\n<li><code>sp<\/code>\/<code>rel<\/code>\/<code>sp<\/code>\/<code>ep<\/code> opisuje sp\u00f4sob diagnostiky ochorenia.<\/li>\n<li><code>m<\/code>\/<code>f<\/code> pohlavie pacienta.<\/li>\n<li><code>014<\/code>\/<code>1524<\/code>\/<code>2535<\/code>\/<code>3544<\/code>\/<code>4554<\/code>\/<code>65<\/code> vek pacienta.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tento st\u013apec m\u00f4\u017eeme rozdeli\u0165 pomocou funkcie <code>extract()<\/code>, pomocou regul\u00e1rneho v\u00fdrazu.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec %\n        extract(name, c(\"diagnosis\", \"gender\", \"age\"), \"new_?(.*)_(.)(.*)\")<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 56 x 5\n#&gt;    .name        .value diagnosis gender age  \n#&gt;    &lt;chr&gt;        &lt;chr&gt;  &lt;chr&gt;     &lt;chr&gt;  &lt;chr&gt;\n#&gt;  1 new_sp_m014  count  sp        m      014  \n#&gt;  2 new_sp_m1524 count  sp        m      1524 \n#&gt;  3 new_sp_m2534 count  sp        m      2534 \n#&gt;  4 new_sp_m3544 count  sp        m      3544 \n#&gt;  5 new_sp_m4554 count  sp        m      4554 \n#&gt;  6 new_sp_m5564 count  sp        m      5564 \n#&gt;  7 new_sp_m65   count  sp        m      65   \n#&gt;  8 new_sp_f014  count  sp        f      014  \n#&gt;  9 new_sp_f1524 count  sp        f      1524 \n#&gt; 10 new_sp_f2534 count  sp        f      2534 \n#&gt; # \u2026 with 46 more rows<\/code><\/pre>\n<p><\/p>\n<p>V\u0161imnite si, \u017ee st\u013apec <em>.name<\/em> mus\u00ed zosta\u0165 nezmenen\u00fd, preto\u017ee to je n\u00e1\u0161 index v n\u00e1zvoch st\u013apcov p\u00f4vodn\u00e9ho s\u00faboru \u00fadajov. <\/p>\n<p><\/p>\n<p>Pohlavie a vek (st\u013apce <em>gender<\/em> a <em>age<\/em>) maj\u00fa fixn\u00e9 a zn\u00e1me hodnoty, preto je odpor\u00fa\u010dan\u00e9 previes\u0165 tieto st\u013apce na faktory:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec %\n            mutate(\n              gender = factor(gender, levels = c(\"f\", \"m\")),\n              age = factor(age, levels = unique(age), ordered = TRUE)\n            ) <\/code><\/pre>\n<p><\/p>\n<p>Nakoniec, aby sme mohli aplikova\u0165 na\u0161u vytvoren\u00fa \u0161pecifik\u00e1ciu na p\u00f4vodn\u00fd d\u00e1tov\u00fd r\u00e1mec <em>who<\/em> mus\u00edme pou\u017ei\u0165 argument <em>spec<\/em> v funkcii <code>pivot_longer()<\/code>.<\/p>\n<p><\/p>\n<p><code>who %&gt;% pivot_longer(spec = spec)<\/code><\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 405,440 x 8\n#&gt;    country     iso2  iso3   year diagnosis gender age   count\n#&gt;    &lt;chr&gt;       &lt;chr&gt; &lt;chr&gt; &lt;int&gt; &lt;chr&gt;     &lt;fct&gt;  &lt;ord&gt; &lt;int&gt;\n#&gt;  1 Afghanistan AF    AFG    1980 sp        m      014      NA\n#&gt;  2 Afghanistan AF    AFG    1980 sp        m      1524     NA\n#&gt;  3 Afghanistan AF    AFG    1980 sp        m      2534     NA\n#&gt;  4 Afghanistan AF    AFG    1980 sp        m      3544     NA\n#&gt;  5 Afghanistan AF    AFG    1980 sp        m      4554     NA\n#&gt;  6 Afghanistan AF    AFG    1980 sp        m      5564     NA\n#&gt;  7 Afghanistan AF    AFG    1980 sp        m      65       NA\n#&gt;  8 Afghanistan AF    AFG    1980 sp        f      014      NA\n#&gt;  9 Afghanistan AF    AFG    1980 sp        f      1524     NA\n#&gt; 10 Afghanistan AF    AFG    1980 sp        f      2534     NA\n#&gt; # \u2026 with 405,430 more rows<\/code><\/pre>\n<p><\/p>\n<p>V\u0161etko, \u010do sme pr\u00e1ve urobili, m\u00f4\u017eeme schematicky zn\u00e1zorni\u0165 nasledovne:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R bal\u00edk tidyr a jeho nov\u00e9 funkcie pivot_longer a pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/77c8c266c205e1b087738d31de8b8523.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"specifikaciya-s-ispolzovaniem-neskolkih-znacheniyvalue\">\u0160pecifik\u00e1cia s pou\u017eit\u00edm viacer\u00fdch hodn\u00f4t (.value)<\/h2>\n<p><\/p>\n<p>V uvedenom pr\u00edklade je st\u013apec \u0161pecifik\u00e1cie <em>.value<\/em> obsahoval iba jednu hodnotu, v drvivej v\u00e4\u010d\u0161ine pr\u00edpadov to tak aj b\u00fdva. <\/p>\n<p><\/p>\n<p>Ale ob\u010das m\u00f4\u017ee nasta\u0165 situ\u00e1cia, ke\u010f je potrebn\u00e9 zl\u00fa\u010di\u0165 hodnoty z st\u013apcov s r\u00f4znymi typmi \u00fadajov. Pomocou zastaranej funkcie <code>spread()<\/code> by to bolo celkom zlo\u017eit\u00e9.<\/p>\n<p><\/p>\n<p>Ni\u017e\u0161ie uveden\u00fd pr\u00edklad je prevzat\u00fd z <noindex><a rel=\"nofollow\" href=\"https:\/\/cran.r-project.org\/web\/packages\/data.table\/vignettes\/datatable-reshape.html\">viniet<\/a><\/noindex> k bal\u00edku <strong>data.table<\/strong>.<\/p>\n<p><\/p>\n<p>Po\u010fme si vytvori\u0165 tr\u00e9ningov\u00fd d\u00e1tov\u00fd r\u00e1mec.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">family &lt;- tibble::tribble(\n  ~family,  ~dob_child1,  ~dob_child2, ~gender_child1, ~gender_child2,\n       1L, &quot;1998-11-26&quot;, &quot;2000-01-29&quot;,             1L,             2L,\n       2L, &quot;1996-06-22&quot;,           NA,             2L,             NA,\n       3L, &quot;2002-07-11&quot;, &quot;2004-04-05&quot;,             2L,             2L,\n       4L, &quot;2004-10-10&quot;, &quot;2009-08-27&quot;,             1L,             1L,\n       5L, &quot;2000-12-05&quot;, &quot;2005-02-28&quot;,             2L,             1L,\n)\nfamily % mutate_at(vars(starts_with(\"dob\")), parse_date)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 5 x 5\n#&gt;   family dob_child1 dob_child2 gender_child1 gender_child2\n#&gt;    &lt;int&gt; &lt;date&gt;     &lt;date&gt;             &lt;int&gt;         &lt;int&gt;\n#&gt; 1      1 1998-11-26 2000-01-29             1             2\n#&gt; 2      2 1996-06-22 NA                     2            NA\n#&gt; 3      3 2002-07-11 2004-04-05             2             2\n#&gt; 4      4 2004-10-10 2009-08-27             1             1\n#&gt; 5      5 2000-12-05 2005-02-28             2             1<\/code><\/pre>\n<p><\/p>\n<p>Vytvoren\u00fd d\u00e1tov\u00fd r\u00e1mec v ka\u017edom riadku obsahuje \u00fadaje o de\u0165och jednej rodiny. V rodin\u00e1ch m\u00f4\u017ee by\u0165 jedno alebo dve deti. Pre ka\u017ed\u00e9 die\u0165a s\u00fa poskytnut\u00e9 \u00fadaje o d\u00e1tume narodenia a pohlav\u00ed, pri\u010dom \u00fadaje pre ka\u017ed\u00e9 die\u0165a s\u00fa v samostatn\u00fdch st\u013apcoch, na\u0161ou \u00falohou je uvies\u0165 tieto \u00fadaje do spr\u00e1vneho form\u00e1tu pre anal\u00fdzu.<\/p>\n<p><\/p>\n<p>V\u0161imnite si, \u017ee m\u00e1me dve premenn\u00e9 s inform\u00e1ciami o ka\u017edom die\u0165ati: jeho pohlavie a d\u00e1tum narodenia (st\u013apce s prefixom <em>dob<\/em> obsahuj\u00fa d\u00e1tum narodenia, st\u013apce s prefixom <em>gender<\/em> obsahuj\u00fa pohlavie die\u0165a\u0165a). V o\u010dak\u00e1vanom v\u00fdsledku by mali by\u0165 v samostatn\u00fdch st\u013apcoch. M\u00f4\u017eeme to dosiahnu\u0165 generovan\u00edm \u0161pecifik\u00e1cie, v ktorej st\u013apec <code>.value<\/code> bude ma\u0165 dve r\u00f4zne hodnoty.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec %\n  pivot_longer_spec(-family) %&gt;%\n  separate(col = name, into = c(\".value\", \"child\"))%&gt;%\n  mutate(child = parse_number(child))\n<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 4 x 3\n#&gt;   .name         .value child\n#&gt;   &lt;chr&gt;         &lt;chr&gt;  &lt;dbl&gt;\n#&gt; 1 dob_child1    dob        1\n#&gt; 2 dob_child2    dob        2\n#&gt; 3 gender_child1 gender     1\n#&gt; 4 gender_child2 gender     2<\/code><\/pre>\n<p><\/p>\n<p>Tak\u017ee si po\u010fme podrobne vysvetli\u0165 kroky, ktor\u00e9 s\u00fa vykonan\u00e9 v uvedenom k\u00f3de.<\/p>\n<p><\/p>\n<ul>\n<li><code>pivot_longer_spec(-family)<\/code> \u2014 vytv\u00e1ra \u0161pecifik\u00e1ciu, ktor\u00e1 z\u00fa\u017ei v\u0161etky existuj\u00face st\u013apce okrem st\u013apca family.<\/li>\n<li><code>separate(col = name, into = c(\".value\", \"child\"))<\/code> \u2014 rozde\u013euje st\u013apec <em>.name<\/em>, ktor\u00fd obsahuje n\u00e1zvy p\u00f4vodn\u00fdch pol\u00ed, pod\u013ea pod\u010diarkovn\u00edka a zapisuje z\u00edskan\u00e9 hodnoty do st\u013apcov <em>.value<\/em> a <em>child<\/em>.<\/li>\n<li><code>mutate(child = parse_number(child))<\/code> \u2014 prev\u00e1dza hodnoty po\u013ea <em>child<\/em> z textov\u00e9ho na \u010d\u00edseln\u00fd typ d\u00e1t.<\/li>\n<\/ul>\n<p><\/p>\n<p>Teraz m\u00f4\u017eeme aplikova\u0165 z\u00edskan\u00fa \u0161pecifik\u00e1ciu na p\u00f4vodn\u00fd d\u00e1tov\u00fd r\u00e1mec a usporiada\u0165 tabu\u013eku do po\u017eadovanej podoby.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">family %&gt;% \n    pivot_longer(spec = spec, na.rm = T)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 9 x 4\n#&gt;   family child dob        gender\n#&gt;    &lt;int&gt; &lt;dbl&gt; &lt;date&gt;      &lt;int&gt;\n#&gt; 1      1     1 1998-11-26      1\n#&gt; 2      1     2 2000-01-29      2\n#&gt; 3      2     1 1996-06-22      2\n#&gt; 4      3     1 2002-07-11      2\n#&gt; 5      3     2 2004-04-05      2\n#&gt; 6      4     1 2004-10-10      1\n#&gt; 7      4     2 2009-08-27      1\n#&gt; 8      5     1 2000-12-05      2\n#&gt; 9      5     2 2005-02-28      1<\/code><\/pre>\n<p><\/p>\n<p>Pou\u017e\u00edvame argument <code>na.rm = TRUE<\/code>, preto\u017ee s\u00fa\u010dasn\u00e1 forma \u00fadajov n\u00fati vytv\u00e1ra\u0165 nadbyto\u010dn\u00e9 riadky pre neexistuj\u00face pozorovania. Preto\u017ee rodina 2 m\u00e1 len jedno die\u0165a, <code>na.rm = TRUE<\/code> zaru\u010duje, \u017ee rodina 2 bude ma\u0165 jeden riadok vo v\u00fdstupn\u00fdch \u00fadajoch.<\/p>\n<p><\/p>\n<h2 id=\"preobrazovanie-data-freymov-iz-dlinnogo-formata-k-shirokomu\">Transform\u00e1cia d\u00e1tov\u00fdch r\u00e1mcov z dlh\u00e9ho form\u00e1tu na \u0161irok\u00fd<\/h2>\n<p><\/p>\n<p><code>pivot_wider()<\/code> \u2014 je inverznou transform\u00e1ciou, ktor\u00e1 naopak zvy\u0161uje po\u010det st\u013apcov d\u00e1tov\u00e9ho r\u00e1mca zn\u00ed\u017een\u00edm po\u010dtu riadkov.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R bal\u00edk tidyr a jeho nov\u00e9 funkcie pivot_longer a pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/b470664e06f362d6f0ea6df9c1ed426d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tak\u00fdto typ transform\u00e1cie sa ve\u013emi zriedka pou\u017e\u00edva na usporiadanie \u00fadajov do preh\u013eadnej formy, av\u0161ak tento pr\u00edstup m\u00f4\u017ee by\u0165 u\u017eito\u010dn\u00fd pri vytv\u00e1ran\u00ed s\u00fahrnn\u00fdch tabuliek na pou\u017eitie v prezent\u00e1ci\u00e1ch alebo pri integr\u00e1cii s in\u00fdmi n\u00e1strojmi.<\/p>\n<p><\/p>\n<p>Skuto\u010dne, funkcie <code>pivot_longer()<\/code> a <code>pivot_wider()<\/code> s\u00fa vz\u00e1jomne symetrick\u00e9 a vykon\u00e1vaj\u00fa opa\u010dn\u00e9 \u010dinnosti, t.j: <code>df %&gt;% pivot_longer(spec = spec) %&gt;% pivot_wider(spec = spec)<\/code> a <code>df %&gt;% pivot_wider(spec = spec) %&gt;% pivot_longer(spec = spec)<\/code> vr\u00e1ti p\u00f4vodn\u00fd df.<\/p>\n<p><\/p>\n<h3 id=\"prosteyshiy-primer-privedeniya-tablicy-k-shirokomu-formatu\">Najjednoduch\u0161\u00ed pr\u00edklad prevodu tabu\u013eky na \u0161irok\u00fd form\u00e1t<\/h3>\n<p><\/p>\n<p>Na demon\u0161tr\u00e1ciu fungovania funkcie <code>pivot_wider()<\/code> budeme pou\u017e\u00edva\u0165 s\u00fabor \u00fadajov <em>fish_encounters<\/em>, ktor\u00fd uchov\u00e1va inform\u00e1cie o tom, ako r\u00f4zne stanice zaznamen\u00e1vaj\u00fa pohyb r\u00fdb v rieke.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 114 x 3\n#&gt;    fish  station  seen\n#&gt;    &lt;fct&gt; &lt;fct&gt;   &lt;int&gt;\n#&gt;  1 4842  Release     1\n#&gt;  2 4842  I80_1       1\n#&gt;  3 4842  Lisbon      1\n#&gt;  4 4842  Rstr        1\n#&gt;  5 4842  Base_TD     1\n#&gt;  6 4842  BCE         1\n#&gt;  7 4842  BCW         1\n#&gt;  8 4842  BCE2        1\n#&gt;  9 4842  BCW2        1\n#&gt; 10 4842  MAE         1\n#&gt; # \u2026 with 104 more rows<\/code><\/pre>\n<p><\/p>\n<p>V v\u00e4\u010d\u0161ine pr\u00edpadov bude t\u00e1to tabu\u013eka informat\u00edvnej\u0161ia a praktickej\u0161ia na pou\u017e\u00edvanie, ak sa inform\u00e1cie z ka\u017edej stanice predstavia v samostatnom st\u013apci.<\/p>\n<p><\/p>\n<p><code>fish_encounters %&gt;% pivot_wider(names_from = station, values_from = seen)<\/code><\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">fish_encounters %&gt;% pivot_wider(names_from = station, values_from = seen)\n#&gt; # A tibble: 19 x 12\n#&gt;    fish  Release I80_1 Lisbon  Rstr Base_TD   BCE   BCW  BCE2  BCW2   MAE\n#&gt;        &amp;        &amp; &amp; &amp; &amp; &amp; &amp;\n#&gt;  1 4842        1     1      1     1       1     1     1     1     1     1\n#&gt;  2 4843        1     1      1     1       1     1     1     1     1     1\n#&gt;  3 4844        1     1      1     1       1     1     1     1     1     1\n#&gt;  4 4845        1     1      1     1       1    NA    NA    NA    NA    NA\n#&gt;  5 4847        1     1      1    NA      NA    NA    NA    NA    NA    NA\n#&gt;  6 4848        1     1      1     1      NA    NA    NA    NA    NA    NA\n#&gt;  7 4849        1     1     NA    NA      NA    NA    NA    NA    NA    NA\n#&gt;  8 4850        1     1     NA     1       1     1     1    NA    NA    NA\n#&gt;  9 4851        1     1     NA    NA      NA    NA    NA    NA    NA    NA\n#&gt; 10 4854        1     1     NA    NA      NA    NA    NA    NA    NA    NA\n#&gt;  # \u2026 with 9 more rows, and 1 more variable: MAW<\/code><\/pre>\n<p><\/p>\n<p>Tento s\u00fabor \u00fadajov zaznamen\u00e1va inform\u00e1cie len v t\u00fdch pr\u00edpadoch, ke\u010f bola ryba zisten\u00e1 stanicou, t.j. ak nebola \u017eiadna ryba zaznamenan\u00e1 nejakou stanicou, tieto \u00fadaje v tabu\u013eke nebud\u00fa. To znamen\u00e1, \u017ee v\u00fdstupn\u00e9 \u00fadaje bud\u00fa vyplnen\u00e9 hodnotou NA. <\/p>\n<p><\/p>\n<p>Av\u0161ak v tomto pr\u00edpade vieme, \u017ee absencia z\u00e1znamu znamen\u00e1, \u017ee ryba nebola zaznamenan\u00e1, tak\u017ee m\u00f4\u017eeme pou\u017ei\u0165 argument <em>values_fill<\/em> v funkcii <code>pivot_wider()<\/code> a vyplni\u0165 tieto ch\u00fdbaj\u00face hodnoty nulami:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">fish_encounters %&gt;% pivot_wider(\n  names_from = station, \n  values_from = seen,\n  values_fill = list(seen = 0)\n)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 19 x 12\n#&gt;    fish  Release I80_1 Lisbon  Rstr Base_TD   BCE   BCW  BCE2  BCW2   MAE\n#&gt;    &lt;fct&gt;   &lt;int&gt; &lt;int&gt;  &lt;int&gt; &lt;int&gt;   &lt;int&gt; &lt;int&gt; &lt;int&gt; &lt;int&gt; &lt;int&gt; &lt;int&gt;\n#&gt;  1 4842        1     1      1     1       1     1     1     1     1     1\n#&gt;  2 4843        1     1      1     1       1     1     1     1     1     1\n#&gt;  3 4844        1     1      1     1       1     1     1     1     1     1\n#&gt;  4 4845        1     1      1     1       1     0     0     0     0     0\n#&gt;  5 4847        1     1      1     0       0     0     0     0     0     0\n#&gt;  6 4848        1     1      1     1       0     0     0     0     0     0\n#&gt;  7 4849        1     1      0     0       0     0     0     0     0     0\n#&gt;  8 4850        1     1      0     1       1     1     1     0     0     0\n#&gt;  9 4851        1     1      0     0       0     0     0     0     0     0\n#&gt; 10 4854        1     1      0     0       0     0     0     0     0     0\n#&gt; # \u2026 with 9 more rows, and 1 more variable: MAW &lt;int&gt;<\/code><\/pre>\n<p><\/p>\n<h3 id=\"generaciya-imeni-stolbca-iz-neskolkih-ishodnyh-peremennyh\">Generovanie n\u00e1zvu st\u013apca z viacer\u00fdch p\u00f4vodn\u00fdch premenn\u00fdch<\/h3>\n<p><\/p>\n<p>Predstavte si, \u017ee m\u00e1me tabu\u013eku, ktor\u00e1 obsahuje kombin\u00e1ciu produktu, krajiny a roka. Na vygenerovanie testovacieho d\u00e1tov\u00e9ho r\u00e1mca m\u00f4\u017eeme vykona\u0165 nasleduj\u00faci k\u00f3d:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">df %\n  filter((product == \"A\" &amp; country == \"AI\") | product == \"B\") %&gt;% \n  mutate(value = rnorm(nrow(.)))<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 45 x 4\n#&gt;    product country  year    value\n#&gt;    &lt;chr&gt;   &lt;chr&gt;   &lt;int&gt;    &lt;dbl&gt;\n#&gt;  1 A       AI       2000 -2.05   \n#&gt;  2 A       AI       2001 -0.676  \n#&gt;  3 A       AI       2002  1.60   \n#&gt;  4 A       AI       2003 -0.353  \n#&gt;  5 A       AI       2004 -0.00530\n#&gt;  6 A       AI       2005  0.442  \n#&gt;  7 A       AI       2006 -0.610  \n#&gt;  8 A       AI       2007 -2.77   \n#&gt;  9 A       AI       2008  0.899  \n#&gt; 10 A       AI       2009 -0.106  \n#&gt; # \u2026 with 35 more rows<\/code><\/pre>\n<p><\/p>\n<p>Na\u0161ou \u00falohou je roz\u0161\u00edri\u0165 d\u00e1tov\u00fd r\u00e1mec tak, aby jeden st\u013apec obsahoval \u00fadaje pre ka\u017ed\u00fa kombin\u00e1ciu produktu a krajiny. Na to sta\u010d\u00ed zada\u0165 do argumentu <em>names_from<\/em> vektor, ktor\u00fd obsahuje n\u00e1zvy sp\u00e1jan\u00fdch pol\u00ed.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">df %&gt;% pivot_wider(names_from = c(product, country),\n                 values_from = \"value\")<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 15 x 4\n#&gt;     year     A_AI    B_AI    B_EI\n#&gt;    &lt;int&gt;    &lt;dbl&gt;   &lt;dbl&gt;   &lt;dbl&gt;\n#&gt;  1  2000 -2.05     0.607   1.20  \n#&gt;  2  2001 -0.676    1.65   -0.114 \n#&gt;  3  2002  1.60    -0.0245  0.501 \n#&gt;  4  2003 -0.353    1.30   -0.459 \n#&gt;  5  2004 -0.00530  0.921  -0.0589\n#&gt;  6  2005  0.442   -1.55    0.594 \n#&gt;  7  2006 -0.610    0.380  -1.28  \n#&gt;  8  2007 -2.77     0.830   0.637 \n#&gt;  9  2008  0.899    0.0175 -1.30  \n#&gt; 10  2009 -0.106   -0.195   1.03  \n#&gt; # \u2026 with 5 more rows<\/code><\/pre>\n<p><\/p>\n<p>M\u00f4\u017eete tie\u017e aplikova\u0165 \u0161pecifik\u00e1cie na funkciu <code>pivot_wider()<\/code>. Ale pri podan\u00ed do <code>pivot_wider()<\/code> \u0161pecifik\u00e1cia vykon\u00e1va transform\u00e1ciu, ktor\u00e1 je opa\u010dn\u00e1 <code>pivot_longer()<\/code>: vytv\u00e1raj\u00fa sa st\u013apce, uveden\u00e9 v <em>.name<\/em>, s pou\u017eit\u00edm hodn\u00f4t z <em>.value<\/em> a in\u00fdch st\u013apcov.<\/p>\n<p><\/p>\n<p>Pre tento d\u00e1tov\u00fd s\u00fabor m\u00f4\u017eete vygenerova\u0165 vlastn\u00fa \u0161pecifik\u00e1ciu, ak chcete, aby ka\u017ed\u00e1 mo\u017en\u00e1 kombin\u00e1cia krajiny a produktu mala vlastn\u00fd st\u013apec, a nie len tie, ktor\u00e9 sa nach\u00e1dzaj\u00fa v d\u00e1tach:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec % \n  expand(product, country, .value = \"value\") %&gt;% \n  unite(\".name\", product, country, remove = FALSE)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 4 x 4\n#&gt;   .name product country .value\n#&gt;   &lt;chr&gt; &lt;chr&gt;   &lt;chr&gt;   &lt;chr&gt; \n#&gt; 1 A_AI  A       AI      value \n#&gt; 2 A_EI  A       EI      value \n#&gt; 3 B_AI  B       AI      value \n#&gt; 4 B_EI  B       EI      value<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">df %&gt;% pivot_wider(spec = spec) %&gt;% head()<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 6 x 5\n#&gt;    year     A_AI  A_EI    B_AI    B_EI\n#&gt;   &lt;int&gt;    &lt;dbl&gt; &lt;dbl&gt;   &lt;dbl&gt;   &lt;dbl&gt;\n#&gt; 1  2000 -2.05       NA  0.607   1.20  \n#&gt; 2  2001 -0.676      NA  1.65   -0.114 \n#&gt; 3  2002  1.60       NA -0.0245  0.501 \n#&gt; 4  2003 -0.353      NA  1.30   -0.459 \n#&gt; 5  2004 -0.00530    NA  0.921  -0.0589\n#&gt; 6  2005  0.442      NA -1.55    0.594<\/code><\/pre>\n<p><\/p>\n<h2 id=\"neskolko-prodvinutyh-primerov-raboty-s-novoy-koncepciey-tidyr\">Nieko\u013eko pokro\u010dil\u00fdch pr\u00edkladov pr\u00e1ce s novou koncepciou tidyr<\/h2>\n<p><\/p>\n<h3 id=\"privedenie-dannyh-k-akkuratnomu-vidu-na-primere-nabora-dannyh-o-perepisi-dohoda-i-arendnoy-platy-v-ssha\">Upravenie d\u00e1t na pr\u00edklade s\u00faboru o pr\u00edjmoch a n\u00e1jme v USA<\/h3>\n<p><\/p>\n<p>D\u00e1tov\u00fd s\u00fabor <em>us_rent_income<\/em> obsahuje inform\u00e1cie o priemernom pr\u00edjme a n\u00e1jomnom za ka\u017ed\u00fd \u0161t\u00e1t v USA za rok 2017 (d\u00e1tov\u00fd s\u00fabor je dostupn\u00fd v bal\u00edku <strong>tidycensus<\/strong>).<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">us_rent_income\n#&gt; # A tibble: 104 x 5\n#&gt;    GEOID NAME       variable estimate   moe\n#&gt;                   \n#&gt;  1 01    Alabama    income      24476   136\n#&gt;  2 01    Alabama    rent          747     3\n#&gt;  3 02    Alaska     income      32940   508\n#&gt;  4 02    Alaska     rent         1200    13\n#&gt;  5 04    Arizona    income      27517   148\n#&gt;  6 04    Arizona    rent          972     4\n#&gt;  7 05    Arkansas   income      23789   165\n#&gt;  8 05    Arkansas   rent          709     5\n#&gt;  9 06    California income      29454   109\n#&gt; 10 06    California rent         1358     3\n#&gt; # \u2026 s 94 \u010fal\u0161\u00edmi riadkami<\/code><\/pre>\n<p><\/p>\n<p>V podobe, v ktorej s\u00fa ulo\u017een\u00e9 \u00fadaje v datasete, <em>us_rent_income<\/em> je s nimi mimoriadne nepohodln\u00e9 pracova\u0165, preto by sme chceli vytvori\u0165 d\u00e1tov\u00fd s\u00fabor so st\u013apcami: <em>rent<\/em>, <em>rent_moe<\/em>, <em>come<\/em>, <em>income_moe<\/em>. Existuje mnoho sp\u00f4sobov, ako vytvori\u0165 t\u00fato \u0161pecifik\u00e1ciu, ale d\u00f4le\u017eit\u00e9 je, \u017ee potrebujeme vygenerova\u0165 ka\u017ed\u00fa kombin\u00e1ciu hodn\u00f4t premennej a <em>estimate\/moe<\/em>, a potom vygenerova\u0165 n\u00e1zov st\u013apca.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">  spec % \n    expand(variable, .value = c(\"estimate\", \"moe\")) %&gt;% \n    mutate(\n      .name = paste0(variable, ifelse(.value == \"moe\", \"_moe\", \"\"))\n    )<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 4 x 3\n#&gt;   variable .value   .name     \n#&gt;   &lt;chr&gt;    &lt;chr&gt;    &lt;chr&gt;     \n#&gt; 1 income   estimate income    \n#&gt; 2 income   moe      income_moe\n#&gt; 3 rent     estimate rent      \n#&gt; 4 rent     moe      rent_moe<\/code><\/pre>\n<p><\/p>\n<p>Poskytnutie tejto \u0161pecifik\u00e1cie <code>pivot_wider()<\/code> n\u00e1m d\u00e1va v\u00fdsledok, ktor\u00fd h\u013ead\u00e1me:<\/p>\n<p><\/p>\n<p><code>us_rent_income %&gt;% pivot_wider(spec = spec)<\/code><\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 52 x 6\n#&gt;    GEOID NAME                 income income_moe  rent rent_moe\n#&gt;    &lt;chr&gt; &lt;chr&gt;                 &lt;dbl&gt;      &lt;dbl&gt; &lt;dbl&gt;    &lt;dbl&gt;\n#&gt;  1 01    Alabama               24476        136   747        3\n#&gt;  2 02    Alaska                32940        508  1200       13\n#&gt;  3 04    Arizona               27517        148   972        4\n#&gt;  4 05    Arkansas              23789        165   709        5\n#&gt;  5 06    California            29454        109  1358        3\n#&gt;  6 08    Colorado              32401        109  1125        5\n#&gt;  7 09    Connecticut           35326        195  1123        5\n#&gt;  8 10    Delaware              31560        247  1076       10\n#&gt;  9 11    District of Columbia  43198        681  1424       17\n#&gt; 10 12    Florida               25952         70  1077        3\n#&gt; # \u2026 with 42 more rows<\/code><\/pre>\n<p><\/p>\n<h3 id=\"vsemirnyy-bank\">Svetov\u00e1 banka<\/h3>\n<p><\/p>\n<p>Niekedy si vy\u017eaduje prevod s\u00faboru \u00fadajov do po\u017eadovanej formy nieko\u013eko krokov.<br \/>\nDatasety <em>world_bank_pop<\/em> obsahuje \u00fadaje Svetovej banky o popul\u00e1cii ka\u017edej krajiny v obdob\u00ed od roku 2000 do roku 2018.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 1,056 x 20\n#&gt;    country indicator `2000` `2001` `2002` `2003`  `2004`  `2005`   `2006`\n#&gt;    &lt;chr&gt;   &lt;chr&gt;      &lt;dbl&gt;  &lt;dbl&gt;  &lt;dbl&gt;  &lt;dbl&gt;   &lt;dbl&gt;   &lt;dbl&gt;    &lt;dbl&gt;\n#&gt;  1 ABW     SP.URB.T\u2026 4.24e4 4.30e4 4.37e4 4.42e4 4.47e+4 4.49e+4  4.49e+4\n#&gt;  2 ABW     SP.URB.G\u2026 1.18e0 1.41e0 1.43e0 1.31e0 9.51e-1 4.91e-1 -1.78e-2\n#&gt;  3 ABW     SP.POP.T\u2026 9.09e4 9.29e4 9.50e4 9.70e4 9.87e+4 1.00e+5  1.01e+5\n#&gt;  4 ABW     SP.POP.G\u2026 2.06e0 2.23e0 2.23e0 2.11e0 1.76e+0 1.30e+0  7.98e-1\n#&gt;  5 AFG     SP.URB.T\u2026 4.44e6 4.65e6 4.89e6 5.16e6 5.43e+6 5.69e+6  5.93e+6\n#&gt;  6 AFG     SP.URB.G\u2026 3.91e0 4.66e0 5.13e0 5.23e0 5.12e+0 4.77e+0  4.12e+0\n#&gt;  7 AFG     SP.POP.T\u2026 2.01e7 2.10e7 2.20e7 2.31e7 2.41e+7 2.51e+7  2.59e+7\n#&gt;  8 AFG     SP.POP.G\u2026 3.49e0 4.25e0 4.72e0 4.82e0 4.47e+0 3.87e+0  3.23e+0\n#&gt;  9 AGO     SP.URB.T\u2026 8.23e6 8.71e6 9.22e6 9.77e6 1.03e+7 1.09e+7  1.15e+7\n#&gt; 10 AGO     SP.URB.G\u2026 5.44e0 5.59e0 5.70e0 5.76e0 5.75e+0 5.69e+0  4.92e+0\n#&gt; # \u2026 with 1,046 more rows, and 11 more variables: `2007` &lt;dbl&gt;,\n#&gt; #   `2008` &lt;dbl&gt;, `2009` &lt;dbl&gt;, `2010` &lt;dbl&gt;, `2011` &lt;dbl&gt;, `2012` &lt;dbl&gt;,\n#&gt; #   `2013` &lt;dbl&gt;, `2014` &lt;dbl&gt;, `2015` &lt;dbl&gt;, `2016` &lt;dbl&gt;, `2017` &lt;dbl&gt;<\/code><\/pre>\n<p><\/p>\n<p>Na\u0161im cie\u013eom je vytvori\u0165 usporiadan\u00fd s\u00fabor \u00fadajov, kde je ka\u017ed\u00e1 premenn\u00e1 v samostatnom st\u013apci. Zatia\u013e nie je jasn\u00e9, ak\u00e9 presne kroky s\u00fa potrebn\u00e9, ale za\u010dneme s najzjavnej\u0161\u00edm probl\u00e9mom: rok je rozdelen\u00fd do viacer\u00fdch st\u013apcov.<\/p>\n<p><\/p>\n<p>Na to, aby sme to opravili, je potrebn\u00e9 pou\u017ei\u0165 funkciu <code>pivot_longer()<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">pop2 % \n  pivot_longer(`2000`:`2017`, names_to = \"year\")<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 19,008 x 4\n#&gt;    country indicator   year  value\n#&gt;    &lt;chr&gt;   &lt;chr&gt;       &lt;chr&gt; &lt;dbl&gt;\n#&gt;  1 ABW     SP.URB.TOTL 2000  42444\n#&gt;  2 ABW     SP.URB.TOTL 2001  43048\n#&gt;  3 ABW     SP.URB.TOTL 2002  43670\n#&gt;  4 ABW     SP.URB.TOTL 2003  44246\n#&gt;  5 ABW     SP.URB.TOTL 2004  44669\n#&gt;  6 ABW     SP.URB.TOTL 2005  44889\n#&gt;  7 ABW     SP.URB.TOTL 2006  44881\n#&gt;  8 ABW     SP.URB.TOTL 2007  44686\n#&gt;  9 ABW     SP.URB.TOTL 2008  44375\n#&gt; 10 ABW     SP.URB.TOTL 2009  44052\n#&gt; # \u2026 with 18,998 more rows<\/code><\/pre>\n<p><\/p>\n<p>\u010eal\u0161\u00edm krokom je zv\u00e1\u017ei\u0165 premenn\u00fa indicator.<br \/>\n<code>pop2 %&gt;% count(indicator)<\/code><\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 4 x 2\n#&gt;   indicator       n\n#&gt;   &lt;chr&gt;       &lt;int&gt;\n#&gt; 1 SP.POP.GROW  4752\n#&gt; 2 SP.POP.TOTL  4752\n#&gt; 3 SP.URB.GROW  4752\n#&gt; 4 SP.URB.TOTL  4752<\/code><\/pre>\n<p><\/p>\n<p>Kde SP.POP.GROW \u2014 pr\u00edrastok popul\u00e1cie, SP.POP.TOTL \u2014 celkov\u00fd po\u010det obyvate\u013eov, a SP.URB. * to je to ist\u00e9, ale iba pre mestsk\u00fa oblas\u0165. Rozdelme tieto hodnoty na dve premenne: area \u2014 lokalita (total alebo urban) a premenn\u00fa obsahuj\u00facu skuto\u010dn\u00e9 \u00fadaje (population alebo growth):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">pop3 % \n  separate(indicator, c(NA, \"area\", \"variable\"))<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 19,008 x 5\n#&gt;    country area  variable year  value\n#&gt;    &lt;chr&gt;   &lt;chr&gt; &lt;chr&gt;    &lt;chr&gt; &lt;dbl&gt;\n#&gt;  1 ABW     URB   TOTL     2000  42444\n#&gt;  2 ABW     URB   TOTL     2001  43048\n#&gt;  3 ABW     URB   TOTL     2002  43670\n#&gt;  4 ABW     URB   TOTL     2003  44246\n#&gt;  5 ABW     URB   TOTL     2004  44669\n#&gt;  6 ABW     URB   TOTL     2005  44889\n#&gt;  7 ABW     URB   TOTL     2006  44881\n#&gt;  8 ABW     URB   TOTL     2007  44686\n#&gt;  9 ABW     URB   TOTL     2008  44375\n#&gt; 10 ABW     URB   TOTL     2009  44052\n#&gt; # \u2026 with 18,998 more rows<\/code><\/pre>\n<p><\/p>\n<p>Teraz n\u00e1m zost\u00e1va iba rozdeli\u0165 premenn\u00fa variable na dva st\u013apce:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">pop3 %&gt;% \n  pivot_wider(names_from = variable, values_from = value)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 9,504 x 5\n#&gt;    country area  year   TOTL    GROW\n#&gt;    &lt;chr&gt;   &lt;chr&gt; &lt;chr&gt; &lt;dbl&gt;   &lt;dbl&gt;\n#&gt;  1 ABW     URB   2000  42444  1.18  \n#&gt;  2 ABW     URB   2001  43048  1.41  \n#&gt;  3 ABW     URB   2002  43670  1.43  \n#&gt;  4 ABW     URB   2003  44246  1.31  \n#&gt;  5 ABW     URB   2004  44669  0.951 \n#&gt;  6 ABW     URB   2005  44889  0.491 \n#&gt;  7 ABW     URB   2006  44881 -0.0178\n#&gt;  8 ABW     URB   2007  44686 -0.435 \n#&gt;  9 ABW     URB   2008  44375 -0.698 \n#&gt; 10 ABW     URB   2009  44052 -0.731 \n#&gt; # \u2026 with 9,494 more rows<\/code><\/pre>\n<p><\/p>\n<h3 id=\"spisok-kontaktov\">Kontaktn\u00fd zoznam<\/h3>\n<p><\/p>\n<p>Posledn\u00fd pr\u00edklad, predstavte si, \u017ee m\u00e1te zoznam kontaktov, ktor\u00fd ste skop\u00edrovali a vlo\u017eili z webovej str\u00e1nky:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">contacts &lt;- tribble(\n  ~field, ~value,\n  &quot;name&quot;, &quot;Jiena McLellan&quot;,\n  &quot;company&quot;, &quot;Toyota&quot;, \n  &quot;name&quot;, &quot;John Smith&quot;,\n  &quot;company&quot;, &quot;google&quot;, \n  &quot;email&quot;, &quot;john@google.com&quot;,\n  &quot;name&quot;, &quot;Huxley Ratcliffe&quot;\n)<\/code><\/pre>\n<p><\/p>\n<p>Prevod tohto zoznamu do tabu\u013ekovej formy je dos\u0165 zlo\u017eit\u00fd, preto\u017ee neexistuje premenn\u00e1, ktor\u00e1 by identifikovala, ktor\u00e9 \u00fadaje patr\u00ed ktor\u00e9mu kontaktu. M\u00f4\u017eeme to napravi\u0165 pozorovan\u00edm, \u017ee \u00fadaje pre ka\u017ed\u00fd nov\u00fd kontakt za\u010d\u00ednaj\u00fa menom (\"name\"), tak\u017ee m\u00f4\u017eeme vytvori\u0165 jedine\u010dn\u00fd identifik\u00e1tor a zvy\u0161ova\u0165 ho o jednotku zaka\u017ed\u00fdm, ke\u010f v st\u013apci field naraz\u00edme na hodnotu \"name\":<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">contacts % \n  mutate(\n    person_id = cumsum(field == \"name\")\n  )\ncontacts<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 6 x 3\n#&gt;   field   value            person_id\n#&gt;   &lt;chr&gt;   &lt;chr&gt;                &lt;int&gt;\n#&gt; 1 name    Jiena McLellan           1\n#&gt; 2 company Toyota                   1\n#&gt; 3 name    John Smith               2\n#&gt; 4 company google                   2\n#&gt; 5 email   john@google.com          2\n#&gt; 6 name    Huxley Ratcliffe         3<\/code><\/pre>\n<p><\/p>\n<p>Teraz, ke\u010f m\u00e1me unik\u00e1tny identifik\u00e1tor pre ka\u017ed\u00fd kontakt, m\u00f4\u017eeme oto\u010di\u0165 pole a hodnotu do st\u013apcov:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">contacts %&gt;% \n  pivot_wider(names_from = field, values_from = value)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 3 x 4\n#&gt;   person_id name             company email          \n#&gt;       &lt;int&gt; &lt;chr&gt;            &lt;chr&gt;   &lt;chr&gt;          \n#&gt; 1         1 Jiena McLellan   Toyota  &lt;NA&gt;           \n#&gt; 2         2 John Smith       google  john@google.com\n#&gt; 3         3 Huxley Ratcliffe &lt;NA&gt;    &lt;NA&gt;<\/code><\/pre>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Z\u00e1ver<\/h2>\n<p><\/p>\n<p>Osobne si mysl\u00edm, \u017ee nov\u00e1 koncepcia <strong>tidyr<\/strong> je naozaj intuit\u00edvne pochopite\u013enej\u0161ia a v\u00fdrazne prevy\u0161uje funk\u010dnos\u0165 zastaran\u00fdch funkci\u00ed <code>spread()<\/code> a <code>gather()<\/code>. D\u00fafam, \u017ee tento \u010dl\u00e1nok v\u00e1m pomohol pochopi\u0165 <code>pivot_longer()<\/code> a <code>pivot_wider()<\/code>.<\/p>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444622\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0430\u043a\u0435\u0442 tidyr \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u044f\u0434\u0440\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 R \u2014 tidyverse. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u2014 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443. \u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u0430\u044f \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0430\u043a\u0435\u0442\u0443, \u043d\u043e \u0434\u0430\u0442\u0438\u0440\u0443\u044e\u0435\u0442\u0441\u044f \u043e\u043d\u0430 2015 \u0433\u043e\u0434\u043e\u043c. \u0410 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u043d\u0430\u0437\u0430\u0434 \u0441\u043e\u043e\u0431\u0449\u0438\u043b \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440 \u0425\u0435\u0434\u043b\u0438 \u0412\u0438\u043a\u0445\u0435\u043c. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":76292,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-76291","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0430\u043a\u0435\u0442 tidyr \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u044f\u0434\u0440\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 R \u2014 tidyverse. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u2014 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443. \u041d\u0430 \u0425\u0430\u0431\u0440\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47R \u043f\u0430\u043a\u0435\u0442 tidyr \u0438 \u0435\u0433\u043e \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pivot_longer \u0438 pivot_wider | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0430\u043a\u0435\u0442 tidyr \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u044f\u0434\u0440\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 R \u2014 tidyverse. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u2014 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443. \u041d\u0430 \u0425\u0430\u0431\u0440\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-01T11:42:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-01T11:42:28+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47R bal\u00edk tidyr a jeho nov\u00e9 funkcie pivot_longer a pivot_wider | ProHoster","description":"Bal\u00edk tidyr patr\u00ed do jadra jednej z najpopul\u00e1rnej\u0161\u00edch kni\u017en\u00edc v jazyku R \u2014 tidyverse. Hlavn\u00fdm \u00fa\u010delom bal\u00edka je prevod \u00fadajov do upraven\u00e9ho form\u00e1tu. Na Habr.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47R \u043f\u0430\u043a\u0435\u0442 tidyr \u0438 \u0435\u0433\u043e \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pivot_longer \u0438 pivot_wider | ProHoster","og:description":"\u041f\u0430\u043a\u0435\u0442 tidyr \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u044f\u0434\u0440\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 R \u2014 tidyverse. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u2014 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443. \u041d\u0430 \u0425\u0430\u0431\u0440\u0435.","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-01T11:42:28+00:00","article:modified_time":"2020-04-01T11:42:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"76291","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:39:23","updated":"2022-09-28 03:21:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/76291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=76291"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/76291\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/76292"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=76291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=76291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=76291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}