{"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\/sl\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider","title":{"rendered":"R paket tidyr i njegove nove funkcije pivot_longer i pivot_wider","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Package <strong>tidyr<\/strong> je del del jedne iz najbolj priljubljenih knji\u017enic v jeziku R - <strong>tidyverse<\/strong>.<br \/>\nGlavna funkcija paketa je ureditev podatkov v pregleden format.<\/p>\n<p><\/p>\n<p>Na Habrju je \u017ee <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/248741\/\">objava<\/a><\/noindex> posve\u010dena temu paketu, vendar je datirana iz leta 2015. Rad bi povedal o najnovej\u0161ih spremembah, o katerih je pred nekaj dnevi obvestil njegov avtor Hadley Wickham.<\/p>\n<p>\n<img decoding=\"async\" alt=\"R paket tidyr i njegove nove funkcije pivot_longer i pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/a290263b63aaea3db70e83a1ec411415.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p><b>SJK<\/b>: Bodo funkcije gather() in spread() zastarele?<\/p>\n<p><b>Hadley Wickham<\/b>: Do neke mere. Priporo\u010dal bomo prenehanje uporabe teh funkcij in odpravljanja napak v njih, vendar bodo \u0161e naprej prisotne v paketu v trenutnem stanju.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"soderzhanie\">Vsebina<\/h2>\n<p><\/p>\n<p><em>\u010ce vas zanima analiza podatkov, vas morda zanimajo moji <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/R4marketing\">telegram<\/a><\/noindex> in <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/R4marketing\/?sub_confirmation=1\">youtube<\/a><\/noindex> kanali. Ve\u010dina vsebine se posve\u010da jeziku R.<\/em><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#koncepciya-tidydata\">Koncept TidyData<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#osnovnye-funkcii-vhodyaschie-v-paket-tydir\">Glavne funkcije, vklju\u010dene v paket tidyr<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#novaya-koncepciya-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy-i-naoborot\">Nova koncept prenosa podatkov iz \u0161irokega v dolg format in obratno<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/ustnovka-naibolee-aktualnoy-versii-tidyr-0839000\">Namestitev najnovej\u0161e razli\u010dice tidyr 0.8.3.9000<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#perehod-na-novye-funkcii\">Prehod na nove funkcije<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#prostoy-primer-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy\">Enostaven primer prenosa podatkov iz \u0161irokega formata v dolg<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#specifikacii\">Specifikacije<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#specifikaciya-s-ispolzovaniem-neskolkih-znacheniyvalue\">Specifikacija z uporabo ve\u010d vrednosti (.value)<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#preobrazovanie-data-freymov-iz-dlinnogo-formata-k-shirokomu\">Pretvorba data frame-ov iz dolgega formata v \u0161irokega<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#prosteyshiy-primer-privedeniya-tablicy-k-shirokomu-formatu\">Najosnovnej\u0161i primer ureditev tabele v \u0161irok format<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#generaciya-imeni-stolbca-iz-neskolkih-ishodnyh-peremennyh\">Generiranje imena stolpca iz ve\u010d izvornih spremenljivk<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#neskolko-prodvinutyh-primerov-raboty-s-novoy-koncepciey-tidyr\">Nekateri napredni primeri dela z novim konceptom 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\">Ureditev podatkov v pregleden format na primeru nabora podatkov o dohodku in najemnini v ZDA<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#vsemirnyy-bank\">Svetovna banka<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#spisok-kontaktov\">Seznam stikov<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#zaklyuchenie\">Zaklju\u010dek<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"koncepciya-tidydata\">Koncept TidyData<\/h2>\n<p><\/p>\n<p>Cilj <strong>tidyr<\/strong> \u2014 vam pomaga urediti podatke v tako imenovani pregleden format. Pregledni podatki so podatki, kjer: <\/p>\n<p><\/p>\n<ul>\n<li>Vsaka spremenljivka se nahaja v stolpcu. <\/li>\n<li>Vsako opazovanje je vrstica. <\/li>\n<li>Vsaka vrednost je celica.<\/li>\n<\/ul>\n<p><\/p>\n<p>S podatki, ki so urejeni v tidy data, je analiziranje precej enostavnej\u0161e in bolj priro\u010dno.<\/p>\n<p><\/p>\n<h2 id=\"osnovnye-funkcii-vhodyaschie-v-paket-tidyr\">Glavne funkcije, vklju\u010dene v paket tidyr<\/h2>\n<p><\/p>\n<p>tidyr vsebuje nabor funkcij, namenjenih transformaciji tabel:<\/p>\n<p><\/p>\n<ul>\n<li><code>fill()<\/code> \u2014 zapolnitev manjkajo\u010dih vrednosti v stolpcu s prej\u0161njimi vrednostmi;<\/li>\n<li><code>separate()<\/code> \u2014 razdeli eno polje na ve\u010d prek lo\u010dila;<\/li>\n<li><code>unite()<\/code> \u2014 izvaja operacijo zdru\u017eevanja ve\u010d polj v eno, nasprotnemu funkciji <code>separate()<\/code>;<\/li>\n<li><code>pivot_longer()<\/code> \u2014 funkcija, ki pretvarja podatke iz \u0161irokega formata v dolg;<\/li>\n<li><code>pivot_wider()<\/code> \u2014 funkcija, ki pretvarja podatke iz dolgega formata v \u0161irokega. Operacija je nasprotna tisti, ki jo izvaja funkcija <code>pivot_longer()<\/code>.<\/li>\n<li><code>gather()<\/code><strong>zastarela<\/strong> \u2014 funkcija, ki pretvarja podatke iz \u0161irokega formata v dolg;<\/li>\n<li><code>spread()<\/code><strong>zastarela<\/strong> \u2014 funkcija, ki pretvarja podatke iz dolgega formata v \u0161irokega. Operacija je nasprotna tisti, ki jo izvaja funkcija <code>gather()<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"novaya-koncepciya-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy-i-naoborot\">Nova koncept prenosa podatkov iz \u0161irokega v dolg format in obratno<\/h2>\n<p><\/p>\n<p>V preteklosti so se za tak\u0161ne transformacije uporabljale funkcije <code>gather()<\/code> in <code>spread()<\/code>. Skozi leta uporabe teh funkcij je postalo o\u010ditno, da so imena teh funkcij in njihovih argumentov ve\u010dini uporabnikov, vklju\u010dno z avtorjem paketa, predstavljala velik izziv, saj so bila precej nejasna in so povzro\u010dala te\u017eave pri iskanju in razumevanju, katera od teh funkcij pretvarja podatkovni okvir iz \u0161iroke v dolgo obliko in obratno.<\/p>\n<p><\/p>\n<p>Zato so <strong>tidyr<\/strong> dodatne nove, pomembne funkcije, ki so namenjene za transformacijo podatkovnih okvirov.<\/p>\n<p><\/p>\n<p>Nove funkcije <code>pivot_longer()<\/code> in <code>pivot_wider()<\/code> so bile ustvarjene pod vplivom nekaterih funkcij iz paketa <strong>cdata<\/strong>, ki sta ga ustvarila John Mount in Nina Zumel.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-naibolee-aktualnoy-versii-tidyr-0839000\">Namestitev najnovej\u0161e razli\u010dice tidyr 0.8.3.9000<\/h3>\n<p><\/p>\n<p>Za namestitev nove, najbolj posodobljene razli\u010dice paketa <strong>tidyr<\/strong> <em>0.8.3.9000<\/em>, v kateri so na voljo nove funkcije, uporabite naslednjo kodo.<\/p>\n<p><\/p>\n<p><code>devtools::install_github(&quot;tidyverse\/tidyr&quot;)<\/code><\/p>\n<p><\/p>\n<p>Ob pisanju te vsebine so bile te funkcije na voljo samo v dev razli\u010dici paketa na GitHubu.<\/p>\n<p><\/p>\n<h3 id=\"perehod-na-novye-funkcii\">Prehod na nove funkcije<\/h3>\n<p><\/p>\n<p>Dejansko ni te\u017eko pretvoriti stare skripte za delo z novimi funkcijami, za bolj\u0161e razumevanje pa bom vzel primer iz dokumentacije starih funkcij in pokazal, kako te iste operacije izvajamo s pomo\u010djo novih <code>pivot_*()<\/code> funkcij.<\/p>\n<p><\/p>\n<p>Pretvorba \u0161iroke oblike v dolgo.<\/p>\n<p>\n<b class=\"spoiler_title\">Primer kode iz dokumentacije funkcije 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>Pretvorba dolge oblike v \u0161iroko.<\/p>\n<p>\n<b class=\"spoiler_title\">Primer kode iz dokumentacije funkcije 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>Ker v zgoraj navedenih primerih dela z <code>pivot_longer()<\/code> in <code>pivot_wider()<\/code>, v izvirni tabeli <em>stocks<\/em> ni stolpcev, navedenih v argumentih <em>names_to<\/em> in <em>values_to<\/em> je potrebno njihova imena navajati v narekovajih.<\/p>\n<p><\/p>\n<p>Tabela, s katero vam bo najla\u017ee razumeti, kako preiti na delo z novim konceptom <strong>tidyr<\/strong>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R paket tidyr i njegove nove funkcije pivot_longer i 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\">Opomba avtorja<\/h2>\n<p><\/p>\n<blockquote><p>Vse nadaljnje besedilo je prilagodljivo, celo prost prevod <noindex><a rel=\"nofollow\" href=\"https:\/\/tidyr.tidyverse.org\/dev\/articles\/pivot.html\">vignettes<\/a><\/noindex> s uradne spletne strani knji\u017enice tidyverse.<\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"prostoy-primer-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy\">Enostaven primer prenosa podatkov iz \u0161irokega formata v dolg<\/h2>\n<p><\/p>\n<p><code>pivot_longer ()<\/code> \u2014 podalj\u0161uje nabor podatkov, zmanj\u0161uje \u0161tevilo stolpcev in pove\u010duje \u0161tevilo vrstic.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R paket tidyr i njegove nove funkcije pivot_longer i pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/fc88b99f2fecdcdaa6179d2e7d29e59d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Za izvedbo primerov, predstavljenih v \u010dlanku, je najprej potrebno nalo\u017eiti potrebne pakete:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">library(tidyr)\nlibrary(dplyr)\nlibrary(readr)<\/code><\/pre>\n<p><\/p>\n<p>Recimo, da imamo tabelo z rezultati ankete, v kateri (med drugim) spra\u0161ujemo ljudi o njihovi religiji in letnem dohodku:<\/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>Ta tabela vsebuje podatke o religiji respondentov v vrsticah, medtem ko je raven dohodka razporejena po imenih stolpcev. \u0160tevilo respondentov iz vsake kategorije je shranjeno v vrednostih celic na prese\u010di\u0161\u010du religije in ravni dohodka. Da bi tabelo prilagodili urejenemu, pravilnemu formatu, je dovolj uporabiti <code>pivot_longer()<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">pew %&gt;% \n  pivot_longer(cols = -religion, names_to = &quot;income&quot;, values_to = &quot;count&quot;)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">pew %&gt;% \n  pivot_longer(cols = -religion, names_to = &quot;income&quot;, values_to = &quot;count&quot;)\n#&gt; # A tibble: 180 x 3\n#&gt;    religion income             count\n#&gt;    &lt;chr&gt;    &lt;chr&gt;              &lt;dbl&gt;\n#&gt;  1 Agnostic &lt;$10k                 27\n#&gt;  2 Agnostic $10-20k               34\n#&gt;  3 Agnostic $20-30k               60\n#&gt;  4 Agnostic $30-40k               81\n#&gt;  5 Agnostic $40-50k               76\n#&gt;  6 Agnostic $50-75k              137\n#&gt;  7 Agnostic $75-100k             122\n#&gt;  8 Agnostic $100-150k            109\n#&gt;  9 Agnostic &gt;150k                 84\n#&gt; 10 Agnostic Don't know\/refused    96\n#&gt; # \u2026 with 170 more rows<\/code><\/pre>\n<p><\/p>\n<p>Argumenti funkcije <code>pivot_longer()<\/code><\/p>\n<p><\/p>\n<ul>\n<li>Prvi argument <em>cols<\/em>, opisuje, katere stolpce je treba zdru\u017eiti. V tem primeru vse stolpce, razen <em>time<\/em>.<\/li>\n<li>Argument <em>names_to<\/em> daje ime spremenljivki, ki bo ustvarjena iz imen stolpcev, ki smo jih zdru\u017eili.<\/li>\n<li><em>values_to<\/em> daje ime spremenljivki, ki bo ustvarjena iz podatkov, shranjenih v vrednostih celic zdru\u017eenih stolpcev.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"specifikacii\">Specifikacije<\/h2>\n<p><\/p>\n<p>To je nova funkcionalnost paketa <strong>tidyr<\/strong>, ki prej pri delu z zastarelimi funkcijami ni bila dostopna.<\/p>\n<p><\/p>\n<p>Specifikacija je podatkovni okvir, kjer vsaka vrstica ustreza enemu stolpcu v novem izhodnem podatkovnem okviru, in dvema posebnima stolpcema, ki se za\u010denjata s: <\/p>\n<p><\/p>\n<ul>\n<li><em>.name<\/em> vsebuje izvorno ime stolpca. <\/li>\n<li><em>.value<\/em> vsebuje ime stolpca, v katerega bodo vklju\u010dene vrednosti celic. <\/li>\n<\/ul>\n<p><\/p>\n<p>Preostali stolpci specifikacije odra\u017eajo, kako bo v novem stolpcu prikazano ime stisnjenih stolpcev iz <em>.name<\/em>.<\/p>\n<p><\/p>\n<p>Specifikacija opisuje metapodatke, shranjene v imenu stolpca, z eno vrstico za vsak stolpec in enim stolpcem za vsako spremenljivko, zdru\u017eeno z imenom stolpca. Morda se trenutno zdi, da je ta definicija zapletena, a po pregledu ve\u010d primerov bo vse precej bolj jasno.<\/p>\n<p><\/p>\n<p>Smisel specifikacije je, da lahko pridobivate, spreminjate in dolo\u010date nove metapodatke k pretvorjenemu podatkovnemu okviru.<\/p>\n<p><\/p>\n<p>Za delo s specifikacijami pri pretvorbi tabele iz \u0161irokega formata v dolg format slu\u017ei funkcija <code>pivot_longer_spec()<\/code>.<\/p>\n<p><\/p>\n<p>Kako ta funkcija deluje, vzame kateri koli podatkovni okvir in oblikuje njegove metapodatke na zgoraj opisani na\u010din. <\/p>\n<p><\/p>\n<p>Za primjer uzmimo skup podataka who, koji dolazi s paketom <strong>tidyr<\/strong>. Ovaj skup podataka sadr\u017ei informacije koje pru\u017ea Svjetska zdravstvena organizacija o oboljenju od tuberkuloze.<\/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;                        \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>Izradimo njegovu specifikaciju.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec &lt;- who %&gt;%\n  pivot_longer_spec(new_sp_m014:newrel_f65, values_to = &quot;count&quot;)<\/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>Polja <em>country<\/em>, <em>iso2<\/em>, <em>iso3<\/em> ve\u0107 su varijable. Na\u0161 zadatak je preokrenuti kolone s <em>new_sp_m014<\/em> o <em>newrel_f65<\/em>.<\/p>\n<p><\/p>\n<p>U nazivima ovih kolona se \u010duva sljede\u0107a informacija:<\/p>\n<p><\/p>\n<ul>\n<li>Prefiks <code>new_<\/code> ukazuje da kolona sadr\u017ei podatke o novim slu\u010dajevima oboljenja od tuberkuloze, trenutni datum okvira sadr\u017ei informacije samo o novim oboljenjima, pa taj prefiks u trenutnom kontekstu ne nosi nikakvo zna\u010denje.<\/li>\n<li><code>sp<\/code>\/<code>rel<\/code>\/<code>sp<\/code>\/<code>ep<\/code> opisuje na\u010din dijagnosticiranja bolesti.<\/li>\n<li><code>m<\/code>\/<code>f<\/code> spol pacijenta.<\/li>\n<li><code>014<\/code>\/<code>1524<\/code>\/<code>2535<\/code>\/<code>3544<\/code>\/<code>4554<\/code>\/<code>65<\/code> uzrast pacijenta.<\/li>\n<\/ul>\n<p><\/p>\n<p>Mo\u017eemo razdvojiti te kolone pomo\u0107u funkcije <code>extract()<\/code>, koriste\u0107i regularni izraz.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec &lt;- spec %&gt;%\n        extract(name, c(&quot;diagnosis&quot;, &quot;gender&quot;, &quot;age&quot;), &quot;new_?(.*)_(.)(.*)&quot;)<\/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>Imajte na umu da kolona <em>.name<\/em> mora ostati nepromijenjena, jer je to na\u0161 indeks u nazivima kolona izvornog skupa podataka. <\/p>\n<p><\/p>\n<p>Spol i dob (kolone <em>gender<\/em> in <em>age<\/em>) imaju fiksne i poznate vrijednosti, stoga se preporu\u010duje pretvaranje tih kolona u faktore:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec &lt;-  spec %&gt;%\n            mutate(\n              gender = factor(gender, levels = c(&quot;f&quot;, &quot;m&quot;)),\n              age = factor(age, levels = unique(age), ordered = TRUE)\n            ) <\/code><\/pre>\n<p><\/p>\n<p>Na kraju, da bismo primijenili kreiranu specifikaciju na izvorni datum okvir <em>who<\/em> moramo koristiti argument <em>spec<\/em> v funkciji <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>Sve \u0161to smo upravo u\u010dinili mo\u017ee se sa\u017eeti na sljede\u0107i na\u010din:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R paket tidyr i njegove nove funkcije pivot_longer i 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\">Specifikacija z uporabo ve\u010d vrednosti (.value)<\/h2>\n<p><\/p>\n<p>U gornjem primjeru kolona specifikacije <em>.value<\/em> je vseboval samo eno vrednost, kar je v ve\u010dini primerov tudi res. <\/p>\n<p><\/p>\n<p>Toda ob\u010dasno se lahko pojavi situacija, ko morate zbrati vrednosti iz stolpcev z razli\u010dnimi tipi podatkov. S pomo\u010djo zastarele funkcije <code>spread()<\/code> bi bilo to precej zapleteno.<\/p>\n<p><\/p>\n<p>Spodnji primer je prevzet iz <noindex><a rel=\"nofollow\" href=\"https:\/\/cran.r-project.org\/web\/packages\/data.table\/vignettes\/datatable-reshape.html\">vignettes<\/a><\/noindex> paketa <strong>data.table<\/strong>.<\/p>\n<p><\/p>\n<p>Ustvarimo trening okvir podatkov.<\/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 &lt;- family %&gt;% mutate_at(vars(starts_with(&quot;dob&quot;)), 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>Ustvarjen okvir podatkov v vsaki vrstici vsebuje podatke o otrocih ene dru\u017eine. V dru\u017einah je lahko en ali dva otroka. Za vsakega otroka so na voljo podatki o datumu rojstva in spolu, pri \u010demer so podatki za vsakega otroka v lo\u010denih stolpcih, na\u0161 cilj je te podatke prilagoditi pravilnemu formatu za analizo.<\/p>\n<p><\/p>\n<p>Opazite, da imamo dve spremenljivki z informacijami o vsakem otroku: njegov spol in datum rojstva (stolpci s predpono <em>dop<\/em> vsebujejo datum rojstva, stolpci s predpono <em>gender<\/em> vsebujejo spol otroka). V pri\u010dakovanem rezultatu bi morali biti ti podatki v lo\u010denih stolpcih. To lahko dose\u017eemo z generiranjem specifikacije, v kateri bo stolpec <code>.value<\/code> imel dve razli\u010dni vrednosti.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec &lt;- family %&gt;%\n  pivot_longer_spec(-family) %&gt;%\n  separate(col = name, into = c(&quot;.value&quot;, &quot;child&quot;))%&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>Torej, poglejmo korak za korakom, katere akcije izvaja zgoraj navedena koda.<\/p>\n<p><\/p>\n<ul>\n<li><code>pivot_longer_spec(-family)<\/code> \u2014 ustvarimo specifikacijo, ki stisne vse obstoje\u010de stolpce, razen stolpca family.<\/li>\n<li><code>separate(col = name, into = c(&quot;.value&quot;, &quot;child&quot;))<\/code> \u2014 lo\u010dimo stolpec <em>.name<\/em>, ki vsebuje imena izvornih polj, po pod\u010drtaju in pridobljene vrednosti prenesemo v stolpce <em>.value<\/em> in <em>child<\/em>.<\/li>\n<li><code>mutate(child = parse_number(child))<\/code> \u2014 pretvorimo vrednosti polja <em>child<\/em> iz besedilne v \u0161tevil\u010dno vrsto podatkov.<\/li>\n<\/ul>\n<p><\/p>\n<p>Zdaj lahko uporabimo pridobljeno specifikacijo na izvirni okvir podatkov in prilagodimo tabelo v \u017eeleno obliko.<\/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>Uporabljamo argument <code>na.rm = TRUE<\/code>, ker trenutna oblika podatkov prisili ustvarjanje odve\u010dnih vrstic za neobstoje\u010de opazovanja. Ker ima dru\u017eina 2 le enega otroka, <code>na.rm = TRUE<\/code> zagotovlja, da bo dru\u017eina 2 imela en vrstico v izhodu.<\/p>\n<p><\/p>\n<h2 id=\"preobrazovanie-data-freymov-iz-dlinnogo-formata-k-shirokomu\">Pretvorba data frame-ov iz dolgega formata v \u0161irokega<\/h2>\n<p><\/p>\n<p><code>pivot_wider()<\/code> je obratna transformacija, ki pove\u010duje \u0161tevilo stolpcev podatkovnega okvira z zmanj\u0161anjem \u0161tevila vrstic.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R paket tidyr i njegove nove funkcije pivot_longer i pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/b470664e06f362d6f0ea6df9c1ed426d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tak\u0161na transformacija se redko uporablja za preurejanje podatkov v urejen videz, vendar je ta tehnika lahko koristna za ustvarjanje povzetkov, ki se uporabljajo v predstavitvah, ali za integracijo z drugimi orodji.<\/p>\n<p><\/p>\n<p>V resnici sta funkciji <code>pivot_longer()<\/code> in <code>pivot_wider()<\/code> simetri\u010dni in izvajata obratne dejavnosti, tj: <code>df %&gt;% pivot_longer(spec = spec) %&gt;% pivot_wider(spec = spec)<\/code> in <code>df %&gt;% pivot_wider(spec = spec) %&gt;% pivot_longer(spec = spec)<\/code> bosta vrnila izvorni df.<\/p>\n<p><\/p>\n<h3 id=\"prosteyshiy-primer-privedeniya-tablicy-k-shirokomu-formatu\">Najosnovnej\u0161i primer ureditev tabele v \u0161irok format<\/h3>\n<p><\/p>\n<p>Za demonstracijo delovanja funkcije <code>pivot_wider()<\/code> bomo uporabili zbirko podatkov <em>fish_encounters<\/em>, ki hrani informacije o tem, kako razli\u010dne postaje bele\u017eijo gibanje rib po reki.<\/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 ve\u010dini primerov bo ta tabela bolj informativna in uporabna, \u010de informacije o vsaki postaji predstavimo v lo\u010denem stolpcu.<\/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; # Tibble: 19 x 12\n#&gt;    fish  Release I80_1 Lisbon  Rstr Base_TD   BCE   BCW  BCE2  BCW2   MAE\n#&gt;        &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 s 9 ve\u010d vrsticami in 1 ve\u010d spremenljivko: MAW<\/code><\/pre>\n<p><\/p>\n<p>Ta zbirka podatkov bele\u017ei informacije samo takrat, ko je bila riba odkrila postaja, tj. \u010de katera riba ni bila zabele\u017eena s strani katere koli postaje, podatkov ne bo v tabeli. To pomeni, da bodo izhodni podatki zapolnjeni z NA. <\/p>\n<p><\/p>\n<p>Vendar v tem primeru vemo, da odsotnost zapisa pomeni, da riba ni bila opa\u017eena, zato lahko uporabimo argument <em>values_fill<\/em> v funkciji <code>pivot_wider()<\/code> in zapolnimo te manjkajo\u010de vrednosti z ni\u010delami:<\/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\">Generiranje imena stolpca iz ve\u010d izvornih spremenljivk<\/h3>\n<p><\/p>\n<p>Predstavljajte si, da imamo tabelo, ki vsebuje kombinacijo izdelka, dr\u017eave in leta. Za generiranje testnega podatkovnega okvira lahko izvedete naslednjo kodo:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">df &lt;- expand_grid(\n  product = c(&quot;A&quot;, &quot;B&quot;), \n  country = c(&quot;AI&quot;, &quot;EI&quot;), \n  year = 2000:2014\n) %&gt;%\n  filter((product == &quot;A&quot; &amp; country == &quot;AI&quot;) | product == &quot;B&quot;) %&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\u0161a naloga je raz\u0161iriti podatkovni okvir tako, da bo en stolpec vseboval podatke za vsako kombinacijo izdelka in dr\u017eave. To lahko dose\u017eemo tako, da posredujemo v argument <em>names_from<\/em> vektor, ki vsebuje imena zdru\u017eenih polj.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">df %&gt;% pivot_wider(names_from = c(product, country),\n                 values_from = &quot;value&quot;)<\/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>Lahko tudi uporabite specifikacije funkcije <code>pivot_wider()<\/code>. Toda ob predlo\u017eitvi v <code>pivot_wider()<\/code> specifikacija izvede transformacijo, nasprotno <code>pivot_longer()<\/code>: ustvarjajo se stolpci, navedeni v <em>.name<\/em>, z uporabo vrednosti iz <em>.value<\/em> in drugih stolpcev.<\/p>\n<p><\/p>\n<p>Za ta nabor podatkov lahko ustvarite prilagojeno specifikacijo, \u010de \u017eelite, da ima vsaka mo\u017ena kombinacija dr\u017eave in izdelka svoj stolpec, ne le tiste, ki so prisotne v podatkih:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec &lt;- df %&gt;% \n  expand(product, country, .value = &quot;value&quot;) %&gt;% \n  unite(&quot;.name&quot;, 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\">Nekateri napredni primeri dela z novim konceptom 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\">Ureditev podatkov v pregleden format na primeru nabora podatkov o dohodku in najemnini v ZDA<\/h3>\n<p><\/p>\n<p>Nabor podatkov <em>us_rent_income<\/em> vsebuje informacije o povpre\u010dnem dohodku in najemnini za vsak zvezno dr\u017eavo v ZDA za leto 2017 (nabor podatkov je na voljo v paketu <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 \u0161e 94 vrsticami<\/code><\/pre>\n<p><\/p>\n<p>V obliki, v kateri so podatki shranjeni v naboru podatkov, <em>us_rent_income<\/em> je z njimi izjemno neprijetno delati, zato bi radi ustvarili nabor podatkov s stolpci: <em>rent<\/em>, <em>rent_moe<\/em>, <em>come<\/em>, <em>income_moe<\/em>. Obstaja ve\u010d na\u010dinov za ustvarjanje te specifikacije, toda glavno je, da moramo ustvariti vsako kombinacijo vrednosti spremenljivke in <em>estimate\/moe<\/em>, nato pa generirati ime stolpca.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">  spec &lt;- us_rent_income %&gt;% \n    expand(variable, .value = c(&quot;estimate&quot;, &quot;moe&quot;)) %&gt;% \n    mutate(\n      .name = paste0(variable, ifelse(.value == &quot;moe&quot;, &quot;_moe&quot;, &quot;&quot;))\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>Navedba te specifikacije <code>pivot_wider()<\/code> nam daje rezultat, ki ga i\u0161\u010demo:<\/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\">Svetovna banka<\/h3>\n<p><\/p>\n<p>V\u010dasih je potrebno za oblikovanje nabora podatkov v \u017eeleno obliko izvesti ve\u010d korakov.<br \/>\nNabor podatkov <em>world_bank_pop<\/em> vsebuje podatke Svetovne banke o prebivalstvu vsake dr\u017eave za obdobje od leta 2000 do 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\u0161 cilj je ustvariti urejen nabor podatkov, kjer je vsaka spremenljivka v stolpcu. \u0160e vedno ni jasno, kateri koraki so potrebni, vendar bomo za\u010deli s najbolj o\u010ditnim problemom: leto je razdeljeno v ve\u010d stolpcev.<\/p>\n<p><\/p>\n<p>Za re\u0161itev tega problema je treba uporabiti funkcijo <code>pivot_longer()<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">pop2 &lt;- world_bank_pop %&gt;% \n  pivot_longer(`2000`:`2017`, names_to = &quot;year&quot;)<\/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>Naslednji korak je preu\u010diti spremenljivko 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>Kjer je SP.POP.GROW \u2013 rast prebivalstva, SP.POP.TOTL \u2013 skupno \u0161tevilo prebivalcev, SP.URB. * pa isto, vendar le za urbano obmo\u010dje. Razdelimo te vrednosti na dve spremenljivki: area \u2013 obmo\u010dje (total ali urban) in spremenljivko, ki vsebuje dejanske podatke (population ali growth):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">pop3 &lt;- pop2 %&gt;% \n  separate(indicator, c(NA, &quot;area&quot;, &quot;variable&quot;))<\/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>Zdaj nam ostane le \u0161e razdeliti spremenljivko variable na dva stolpca:<\/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\">Seznam stikov<\/h3>\n<p><\/p>\n<p>Zadnji primer, predstavljajte si, da imate seznam kontaktov, ki ste jih kopirali in prilepili s spletne strani:<\/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>\u041f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043a \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0430, \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a\u0430\u043a\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e, \u0437\u0430\u043c\u0435\u0442\u0438\u0432, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043d\u043e\u0432\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 \u0438\u043c\u0435\u043d\u0438 (&quot;name&quot;), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 field \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u201cname\u201d:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">contacts &lt;- contacts %&gt;% \n  mutate(\n    person_id = cumsum(field == &quot;name&quot;)\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>Zdaj, ko imamo edinstven identifikator za vsak kontakt, lahko preusmerimo field in value v stolpce:<\/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\">Zaklju\u010dek<\/h2>\n<p><\/p>\n<p>Po mojem mnenju je nova konceptualizacija <strong>tidyr<\/strong> resni\u010dno intuitivno bolj razumljiva in mo\u010dno presega stare funkcije <code>spread()<\/code> in <code>gather()<\/code>. Upam, da vam je ta \u010dlanek pomagal razjasniti <code>pivot_longer()<\/code> in <code>pivot_wider()<\/code>.<\/p>\n<p>Izvor: <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\/sl\/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=\"sl_SI\" \/>\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\/sl\/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 paket tidyr in njegove nove funkcije pivot_longer in pivot_wider | ProHoster","description":"Paket tidyr je jedro ene najbolj priljubljenih knji\u017enic v jeziku R \u2014 tidyverse. Glavna naloga paketa je urediti podatke v lep\u0161o obliko. Na Habr.","canonical_url":"https:\/\/prohoster.info\/sl\/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":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/76291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=76291"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/76291\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/76292"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=76291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=76291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=76291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}