{"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\/et\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider","title":{"rendered":"R pakett tidyr ja selle uued funktsioonid pivot_longer ja pivot_wider","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Pakett <strong>tidyr<\/strong> on \u00fcks populaarsemaid R keele teeke, <strong>tidyverse<\/strong>.<br \/>\nPaketi peamine eesm\u00e4rk on andmete korrastamine.<\/p>\n<p><\/p>\n<p>Habr on juba olemas <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/248741\/\">publikatsioon<\/a><\/noindex> sellele paketile p\u00fchendatud artikkel, kuid see oli kirjutatud 2015. aastal. Soovin r\u00e4\u00e4kida k\u00f5ige olulisematest muudatustest, millest m\u00f5ned p\u00e4evad tagasi teatas selle looja Hadley Wickham.<\/p>\n<p>\n<img decoding=\"async\" alt=\"R pakett tidyr ja selle uued funktsioonid pivot_longer ja pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/a290263b63aaea3db70e83a1ec411415.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p><b>SJK<\/b>: Kas funktsioonid gather() ja spread() muutuvad vananenuks?<\/p>\n<p><b>Hadley Wickham<\/b>: Mingil m\u00e4\u00e4ral. Me l\u00f5petame nende funktsioonide kasutamise soovitamise ja nende vigade parandamise, kuid need j\u00e4\u00e4vad paketti senisesse olekusse.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"soderzhanie\">Sisukord<\/h2>\n<p><\/p>\n<p><em>Kui teid huvitab andmeanal\u00fc\u00fcs, v\u00f5ivad teid huvitada minu <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/R4marketing\">telegram<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/R4marketing\/?sub_confirmation=1\">youtube<\/a><\/noindex> kanalid. Suur osa sisu on p\u00fchendatud R-keelele.<\/em><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#koncepciya-tidydata\">TidyData kontseptsioon<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#osnovnye-funkcii-vhodyaschie-v-paket-tydir\">Peamised funktsioonid, mis kuuluvad tidyr paketti<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#novaya-koncepciya-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy-i-naoborot\">Uus kontseptsioon andmete korrastamisest laiast vormist pika vormi ja vastupidi<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/ustnovka-naibolee-aktualnoy-versii-tidyr-0839000\">Tidyr uusima versiooni 0.8.3.9000 installimine<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#perehod-na-novye-funkcii\">Uute funktsioonide kasutusele v\u00f5tmine<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#prostoy-primer-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy\">Lihtne n\u00e4ide andmete muutmisest laiast vormist pikaks<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#specifikacii\">Spetsifikatsioonid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#specifikaciya-s-ispolzovaniem-neskolkih-znacheniyvalue\">M\u00e4\u00e4ratlemine mitme v\u00e4\u00e4rtuse (.value) abil<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#preobrazovanie-data-freymov-iz-dlinnogo-formata-k-shirokomu\">Andframe'ide muutmine pikast vormist laia vormi<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#prosteyshiy-primer-privedeniya-tablicy-k-shirokomu-formatu\">Lihtsaim n\u00e4ide tabeli muutmisest laia vormi<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#generaciya-imeni-stolbca-iz-neskolkih-ishodnyh-peremennyh\">Veeru nime genereerimine mitmest algmuutusest<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#neskolko-prodvinutyh-primerov-raboty-s-novoy-koncepciey-tidyr\">M\u00f5ned edasij\u00f5udnud n\u00e4ited uue tidyr kontseptsiooni kasutamisest<\/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\">Andmete korrastamine USA sissetulekute ja \u00fc\u00fcride loenduse andmete n\u00e4itel<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#vsemirnyy-bank\">Maailmapank<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#spisok-kontaktov\">Kontaktide loend<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#zaklyuchenie\">Kokkuv\u00f5te<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"koncepciya-tidydata\">TidyData kontseptsioon<\/h2>\n<p><\/p>\n<p>Eesm\u00e4rk <strong>tidyr<\/strong> \u2014 aidata teil andmeid korrastada nii-\u00f6elda kenasse vormi. Korrastatud andmed on sellised, kus: <\/p>\n<p><\/p>\n<ul>\n<li>Iga muutuja asub samas veerus. <\/li>\n<li>Iga t\u00e4helepanek on rida. <\/li>\n<li>Iga v\u00e4\u00e4rtus on lahtris.<\/li>\n<\/ul>\n<p><\/p>\n<p>Korrastatud andmetega on anal\u00fc\u00fcsi viimistlemine oluliselt lihtsam ja mugavam.<\/p>\n<p><\/p>\n<h2 id=\"osnovnye-funkcii-vhodyaschie-v-paket-tidyr\">Peamised funktsioonid, mis kuuluvad tidyr paketti<\/h2>\n<p><\/p>\n<p>Tidyr sisaldab komplekti funktsioone tabelite muutmiseks:<\/p>\n<p><\/p>\n<ul>\n<li><code>fill()<\/code> \u2014 lahtrite puuduvate v\u00e4\u00e4rtuste t\u00e4itmine eelnevate v\u00e4\u00e4rtustega;<\/li>\n<li><code>separate()<\/code> \u2014 jagab \u00fche v\u00e4lja mitmeks, kasutades eraldajat;<\/li>\n<li><code>unite()<\/code> \u2014 \u00fchendab mitu v\u00e4lja \u00fcheks, vastupidine funktsioonile <code>separate()<\/code>;<\/li>\n<li><code>pivot_longer()<\/code> \u2014 funktsioon, mis muutab andmeid laiast vormist pikaks;<\/li>\n<li><code>pivot_wider()<\/code> \u2014 funktsioon, mis muutab andmeid pikast vormist laiseks. Vastupidine funktsioonile <code>pivot_longer()<\/code>.<\/li>\n<li><code>gather()<\/code><strong>minenud<\/strong> \u2014 funktsioon, mis muutab andmeid laiast vormist pikaks;<\/li>\n<li><code>spread()<\/code><strong>minenud<\/strong> \u2014 funktsioon, mis muutab andmeid pikast vormist laiseks. Vastupidine funktsioonile <code>gather()<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"novaya-koncepciya-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy-i-naoborot\">Uus kontseptsioon andmete korrastamisest laiast vormist pika vormi ja vastupidi<\/h2>\n<p><\/p>\n<p>Varasema sellise transformatsiooni jaoks kasutati funktsioone <code>gather()<\/code> ja <code>spread()<\/code>. Aastate jooksul on nende funktsioonide olemasolu n\u00e4idanud, et enamiku kasutajate, sealhulgas paketi autori jaoks, ei olnud nende funktsioonide ja argumentide nimed piisavalt selged, mis tekitas raskusi nende leidmisel ja m\u00f5istmisel, milline neist funktsioonidest viib andmeraami laiale v\u00f5i pikale vormingule ja vastupidi.<\/p>\n<p><\/p>\n<p>Seet\u00f5ttu <strong>tidyr<\/strong> lisati<\/p>\n<p><\/p>\n<p>Uued funktsioonid <code>pivot_longer()<\/code> ja <code>pivot_wider()<\/code> kaks uut, olulist funktsiooni, mis on m\u00f5eldud andmeraamide transformeerimiseks. <strong>pakendist<\/strong>, mille l\u00f5id John Mount ja Nina Zumel.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-naibolee-aktualnoy-versii-tidyr-0839000\">Tidyr uusima versiooni 0.8.3.9000 installimine<\/h3>\n<p><\/p>\n<p>Uue ja k\u00f5ige v\u00e4rskema versiooni installimiseks <strong>tidyr<\/strong> <em>0.8.3.9000<\/em>, milles on saadaval uued funktsioonid, kasutage j\u00e4rgmist koodi.<\/p>\n<p><\/p>\n<p><code>devtools::install_github(\"tidyverse\/tidyr\")<\/code><\/p>\n<p><\/p>\n<p>Artikli kirjutamise ajal on need funktsioonid saadaval ainult paketi dev versioonis GitHubis.<\/p>\n<p><\/p>\n<h3 id=\"perehod-na-novye-funkcii\">Uute funktsioonide kasutusele v\u00f5tmine<\/h3>\n<p><\/p>\n<p>Tegelikult pole vanade skriptide uutele funktsioonidele \u00fcleviimine keeruline, et paremini m\u00f5ista, kasutan ma vana funktsiooni dokumentatsioonist n\u00e4idet ja n\u00e4itan, kuidas samu toiminguid saab teha uute <code>pivot_*()<\/code> funktsioonidega.<\/p>\n<p><\/p>\n<p>Laia vormingu muutmine pikaks.<\/p>\n<p>\n<b class=\"spoiler_title\">N\u00e4ide koodist gather funktsiooni dokumentatsioonist<\/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>Pika vormingu muutmine laieks.<\/p>\n<p>\n<b class=\"spoiler_title\">N\u00e4ide koodist spread funktsiooni dokumentatsioonist<\/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>Kuna \u00fclaltoodud n\u00e4idetes t\u00f6\u00f6deldes <code>pivot_longer()<\/code> ja <code>pivot_wider()<\/code>, ei ole algses tabelis <em>stocks<\/em> veerusid, mida on loetletud argumentides <em>names_to<\/em> ja <em>values_to<\/em> , tuleb nende nimed kirjutada jutum\u00e4rkidesse.<\/p>\n<p><\/p>\n<p>Tabel, mille abil on sul k\u00f5ige lihtsam aru saada, kuidas liikuda uue kontseptsiooni juurde <strong>tidyr<\/strong>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R pakett tidyr ja selle uued funktsioonid pivot_longer ja 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\">Autori m\u00e4rkus<\/h2>\n<p><\/p>\n<blockquote><p>Kogu edaspidine tekst on kohandatud, v\u00f5iksin isegi \u00f6elda, et vabalt t\u00f5lgitud <noindex><a rel=\"nofollow\" href=\"https:\/\/tidyr.tidyverse.org\/dev\/articles\/pivot.html\">vignette'idest<\/a><\/noindex> Tidyverse'i teegi ametlikult veebilehelt.<\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"prostoy-primer-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy\">Lihtne n\u00e4ide andmete muutmisest laiast vormist pikaks<\/h2>\n<p><\/p>\n<p><code>pivot_longer ()<\/code> \u2014 muudab andmekogusid pikemaks, v\u00e4hendades veergude arvu ja suurendades ridade arvu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R pakett tidyr ja selle uued funktsioonid pivot_longer ja pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/fc88b99f2fecdcdaa6179d2e7d29e59d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Artiklis esitatud n\u00e4idete t\u00e4itmiseks on algselt vaja vajalikud paketid laadida:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">library(tidyr)\nlibrary(dplyr)\nlibrary(readr)<\/code><\/pre>\n<p><\/p>\n<p>Oletame, et meil on k\u00fcsitlustulemuste tabel, kus (muuhulgas) k\u00fcsiti inimesi nende usu ja aastase sissetuleku kohta:<\/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>Selles tabelis on esitatud vastajate religiooni andmed ridades ja sissetulekute tase veergude nimedes. Iga kategooria vastajate arv salvestatakse lahtrite v\u00e4\u00e4rtustesse, mis paiknevad religiooni ja sissetuleku taseme ristumiskohas. Tabeli korralikuks ja \u00f5igeks formaadiks viimiseks piisab, kui kasutada <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-20k               34\n#&gt;  3 Agnostik 20-30k               60\n#&gt;  4 Agnostik 30-40k               81\n#&gt;  5 Agnostik 40-50k               76\n#&gt;  6 Agnostik 50-75k              137\n#&gt;  7 Agnostik 75-100k             122\n#&gt;  8 Agnostik 100-150k            109\n#&gt;  9 Agnostik &gt;150k                 84\n#&gt; 10 Agnostik Ei tea\/refus    96\n#&gt; # \u2026 with 170 more rows<\/code><\/pre>\n<p><\/p>\n<p>Funktsiooni argumendid <code>pivot_longer()<\/code><\/p>\n<p><\/p>\n<ul>\n<li>Esimene argument <em>cols<\/em>, m\u00e4\u00e4ratleb, milliseid veerge on vaja \u00fchendada. Antud juhul k\u00f5ik veerud, v\u00e4lja arvatud <em>time<\/em>.<\/li>\n<li>Argumendiks <em>names_to<\/em> annab nime muutuja, mis luuakse \u00fchendatud veergude nimedest.<\/li>\n<li><em>values_to<\/em> annab nime muutuja, mis luuakse \u00fchendatud veergude lahtrite v\u00e4\u00e4rtustest.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"specifikacii\">Spetsifikatsioonid<\/h2>\n<p><\/p>\n<p>See on uus funktsioon paketis <strong>tidyr<\/strong>, mis oli varem vananenud funktsioonide kasutamisel k\u00e4ttesaamatu.<\/p>\n<p><\/p>\n<p>Spetsiifikatsioon on andmeframe, mille iga rida vastab \u00fchele veergule uues v\u00e4ljundandmeframe'is, ja kahele spetsiaalsele veerule, mis algavad: <\/p>\n<p><\/p>\n<ul>\n<li><em>.name<\/em> sisaldab algset veeru nime. <\/li>\n<li><em>.value<\/em> sisaldab veeru nime, kuhu lahtrite v\u00e4\u00e4rtused sisenevad. <\/li>\n<\/ul>\n<p><\/p>\n<p>\u00dclej\u00e4\u00e4nud spetsiifikatsiooni veerud kajastavad seda, kuidas uues veerus kuvatakse kompressitavate veergude nimed. <em>.name<\/em>.<\/p>\n<p><\/p>\n<p>Spetsiifikatsioon kirjeldab metaandmeid, mis on salvestatud veeru nimes, iga veeru jaoks \u00fcks rida ja iga muutuja jaoks \u00fcks veerg, mis on \u00fchendatud veeru nimega. Praegu v\u00f5ib see m\u00e4\u00e4ratlemine tunduda segane, kuid p\u00e4rast mitme n\u00e4ite uurimist saab k\u00f5ik m\u00e4rgatavalt selgemaks.<\/p>\n<p><\/p>\n<p>Spetsiifikatsiooni m\u00f5te seisneb selles, et saate kaevata, muuta ja m\u00e4\u00e4rata uusi metaandmeid muundatavale andmeframe'ile.<\/p>\n<p><\/p>\n<p>Tabeli muundamiseks laiast formaadist pikaks kasutab funktsiooni <code>pivot_longer_spec()<\/code>.<\/p>\n<p><\/p>\n<p>Kuidas see funktsioon t\u00f6\u00f6tab, see v\u00f5tab mis tahes andmeframe'i ja vormib selle metaandmed \u00fclaltoodud viisil. <\/p>\n<p><\/p>\n<p>N\u00e4iteks v\u00f5tame andmestiku who, mis on saadaval koos paketiga <strong>tidyr<\/strong>. See andmestik sisaldab teavet, mida jagab Maailmarebased organizatsioon tuberkuloosiga seonduva haigestumise kohta.<\/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>Koostame selle spetsifikatsiooni.<\/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>V\u00e4ljad <em>country<\/em>, <em>iso2<\/em>, <em>iso3<\/em> on juba muutujad. Meie \u00fclesanne on veeretada veerud <em>new_sp_m014<\/em> 6TB <em>newrel_f65<\/em>.<\/p>\n<p><\/p>\n<p>Nende veergude nimedes sisaldub j\u00e4rgnev teave:<\/p>\n<p><\/p>\n<ul>\n<li>Prefiks <code>new_<\/code> indikaator, et veerg sisaldab andmeid tuberkuloosi uute juhtude kohta, praegune andmepakk sisaldab teavet ainult uute haigestumiste kohta, seega ei ole antud eesliide praeguses kontekstis m\u00f5ttekas.<\/li>\n<li><code>sp<\/code>\/<code>rel<\/code>\/<code>sp<\/code>\/<code>ep<\/code> kirjeldab haiguse diagnoosimise meetodit.<\/li>\n<li><code>m<\/code>\/<code>f<\/code> patsiendi sugu.<\/li>\n<li><code>014<\/code>\/<code>1524<\/code>\/<code>2535<\/code>\/<code>3544<\/code>\/<code>4554<\/code>\/<code>65<\/code> patsiendi vanusevahemik.<\/li>\n<\/ul>\n<p><\/p>\n<p>Saame neid veerge jagada funktsiooniga <code>extract()<\/code>, kasutades regulaaravaldisi.<\/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>Pange t\u00e4hele, et veerg <em>.name<\/em> peab j\u00e4\u00e4ma muutumatuks, kuna see on meie indeks algsete andmestiku veergude nimedes. <\/p>\n<p><\/p>\n<p>Sugu ja vanus (veergude <em>gender<\/em> ja <em>age<\/em>) on fikseeritud ja teadaolevad v\u00e4\u00e4rtused, seega on soovitatav muuta need veerud faktoriteks:<\/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>L\u00f5puks, et rakendada meie loodud spetsifikatsiooni algsele andmepakile <em>who<\/em> peame kasutama argumenti <em>spec<\/em> funktsioonis <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>K\u00f5ike, mida me just tegime, saab visuaalselt kujutada j\u00e4rgmiselt:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R pakett tidyr ja selle uued funktsioonid pivot_longer ja 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\">M\u00e4\u00e4ratlemine mitme v\u00e4\u00e4rtuse (.value) abil<\/h2>\n<p><\/p>\n<p>\u00dclaltoodud n\u00e4ites sisaldas spetsifikatsiooni veerg <em>.value<\/em> ainult \u00fchte v\u00e4\u00e4rtust, enamasti on see t\u00f5si. <\/p>\n<p><\/p>\n<p>Kuid m\u00f5nikord v\u00f5ib tekkida olukord, kus peate koguma v\u00e4\u00e4rtusi erinevat t\u00fc\u00fcpi andmete veergudest. Selle saavutamine vananenud funktsiooni abil <code>spread()<\/code> oleks \u00fcsna keeruline.<\/p>\n<p><\/p>\n<p>Allpool toodud n\u00e4ide on \u00fcle v\u00f5etud <noindex><a rel=\"nofollow\" href=\"https:\/\/cran.r-project.org\/web\/packages\/data.table\/vignettes\/datatable-reshape.html\">vignette'idest<\/a><\/noindex> paketist <strong>data.table<\/strong>.<\/p>\n<p><\/p>\n<p>L\u00e4hme loome harjutusandmestiku.<\/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>Loodud andmeraamistiku iga rida sisaldab teavet \u00fche pere laste kohta. Peredes v\u00f5ib olla \u00fcks v\u00f5i kaks last. Iga lapse kohta esitatakse andmed s\u00fcnnikuup\u00e4eva ja soo kohta, kusjuures iga lapse andmed on eraldi veergudes, meie \u00fclesanne on viia need andmed anal\u00fc\u00fcsimiseks \u00f5ige vormingusse.<\/p>\n<p><\/p>\n<p>Pange t\u00e4hele, et meil on kaks muutujat, mis sisaldavad teavet iga lapse kohta: nende sugu ja s\u00fcnnikuup\u00e4ev (veerud, millel on eess\u00f5na <em>dob<\/em> sisaldavad s\u00fcnnikuup\u00e4eva, veerud, millel on eess\u00f5na <em>gender<\/em> sisaldavad lapse sugu). Oodatavas tulemus peab need olema eraldi veergudes. Saame teha seda, genereerides spetsifikatsiooni, kus veerg <code>.value<\/code> nurgel on kaks erinevat v\u00e4\u00e4rtust.<\/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>Nii et vaatame samm-sammult, milliseid toiminguid \u00fclaltoodud kood teostab.<\/p>\n<p><\/p>\n<ul>\n<li><code>pivot_longer_spec(-family)<\/code> \u2014 loome spetsifikatsiooni, mis kokkusurub k\u00f5ik olemasolevad veerud, v\u00e4lja arvatud veerg family.<\/li>\n<li><code>separate(col = name, into = c(\".value\", \"child\"))<\/code> \u2014 lahutame veeru <em>.name<\/em>, mis sisaldab algsete v\u00e4ljade nimesid, allajoonte j\u00e4rgi ja paneme saadud v\u00e4\u00e4rtused veergudesse <em>.value<\/em> ja <em>laps<\/em>.<\/li>\n<li><code>mutate(child = parse_number(child))<\/code> \u2014 muundame v\u00e4lja v\u00e4\u00e4rtused <em>laps<\/em> tekstilisest numbriliseks andmet\u00fc\u00fcbiks.<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00fc\u00fcd saame algsele andmeraamile rakendada saadud spetsifikatsiooni ja viia tabel soovitud vormingusse.<\/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>Kasutame argumenti <code>na.rm = TRUE<\/code>, kuna praegune andmevorming sunnib me looma liigseid ridu mitteeksisteerivate vaatluste jaoks. Kuna peres 2 on vaid \u00fcks laps, <code>na.rm = TRUE<\/code> tagab, et peres 2 on v\u00e4ljundandmetes \u00fcks rida.<\/p>\n<p><\/p>\n<h2 id=\"preobrazovanie-data-freymov-iz-dlinnogo-formata-k-shirokomu\">Andframe'ide muutmine pikast vormist laia vormi<\/h2>\n<p><\/p>\n<p><code>pivot_wider()<\/code> on on on on on on on on on on on on on on on on on on on on on on on on on on on on on on on on on on on<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"R pakett tidyr ja selle uued funktsioonid pivot_longer ja pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/b470664e06f362d6f0ea6df9c1ed426d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>T\u00fc\u00fcpi transformatsioon on \u00e4\u00e4rmiselt harva kasutusel andmete korraldamiseks, kuid see tehnika v\u00f5ib olla kasulik kogumite loomisel, mida kasutatakse esitlustes v\u00f5i muu t\u00f6\u00f6riistadega integreerimisel.<\/p>\n<p><\/p>\n<p>Tegelikult on funktsioonid <code>pivot_longer()<\/code> ja <code>pivot_wider()<\/code> s\u00fcmmeetrilised ja teevad \u00fcksteisele vastupidiseid toiminguid, s.t: <code>df %&gt;% pivot_longer(spec = spec) %&gt;% pivot_wider(spec = spec)<\/code> ja <code>df %&gt;% pivot_wider(spec = spec) %&gt;% pivot_longer(spec = spec)<\/code> tagasi algse df.<\/p>\n<p><\/p>\n<h3 id=\"prosteyshiy-primer-privedeniya-tablicy-k-shirokomu-formatu\">Lihtsaim n\u00e4ide tabeli muutmisest laia vormi<\/h3>\n<p><\/p>\n<p>Funktsiooni t\u00f6\u00f6tamise demonstreerimiseks <code>pivot_wider()<\/code> kasutame andmekogu <em>fish_encounters<\/em>, mis sisaldab teavet selle kohta, kuidas erinevad jaamad registreerivad kalade liikumist j\u00f5est.<\/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>Enamasti on see tabel informatiivsem ja kasutajas\u00f5bralikum, kui esitada teavet iga jaama kohta eraldi veerus.<\/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;        &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    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 veel 9 rida, ja 1 muutuja: MAW<\/code><\/pre>\n<p><\/p>\n<p>See andmekogum registreerib teavet ainult siis, kui kala on jaama poolt avastatud, st kui m\u00f5ni kala ei ole m\u00f5ne jaama poolt registreeritud, ei ole neid andmeid tabelis. See t\u00e4hendab, et v\u00e4ljundandmed t\u00e4idetakse NA. <\/p>\n<p><\/p>\n<p>Siiski teame, et andme puudumine t\u00e4hendab, et kala ei olnud n\u00e4htav, seega saame kasutada argumenti <em>values_fill<\/em> funktsioonis <code>pivot_wider()<\/code> ja t\u00e4ita need puuduolevad v\u00e4\u00e4rtused nullidega:<\/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\">Veeru nime genereerimine mitmest algmuutusest<\/h3>\n<p><\/p>\n<p>Kujutage ette, et meil on tabel, mis sisaldab toote, riigi ja aasta kombinatsiooni. Testframe'i genereerimiseks saab kasutada j\u00e4rgmist koodi:<\/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>Meie \u00fclesanne on laiendada andmekaarti nii, et \u00fcks veerg sisaldaks andmeid iga toote ja riigi kombinatsiooni kohta. Selleks piisab, kui edastada argument <em>names_from<\/em> vektor, mis sisaldab \u00fchendatavate v\u00e4ljade nimesid.<\/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>Saate samuti rakendada spetsifikatsioone funktsioonile <code>pivot_wider()<\/code>. Kuid kui see edastatakse <code>pivot_wider()<\/code> spetsifikatsioon viib l\u00e4bi vastupidise transformatsiooni <code>pivot_longer()<\/code>: luuakse veerud, mis on m\u00e4\u00e4ratud <em>.name<\/em>, kasutades v\u00e4\u00e4rtusi <em>.value<\/em> ja teistest veergudest.<\/p>\n<p><\/p>\n<p>Selle andmestiku jaoks saate genereerida kohandatud spetsifikatsiooni, kui soovite, et iga v\u00f5imalik riigi ja toote kombinatsioon oleks oma veerus, mitte ainult need, mis on andmetes olemas:<\/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\">M\u00f5ned edasij\u00f5udnud n\u00e4ited uue tidyr kontseptsiooni kasutamisest<\/h2>\n<p><\/p>\n<h3 id=\"privedenie-dannyh-k-akkuratnomu-vidu-na-primere-nabora-dannyh-o-perepisi-dohoda-i-arendnoy-platy-v-ssha\">Andmete korrastamine USA sissetulekute ja \u00fc\u00fcride loenduse andmete n\u00e4itel<\/h3>\n<p><\/p>\n<p>Andmestik <em>us_rent_income<\/em> sisaldab teavet USA iga osariigi keskmise sissetuleku ja \u00fc\u00fcri kohta 2017. aastal (andmestik on saadaval paketis <strong>tidycensus<\/strong>).<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">us_rent_income\n#&gt; # 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 veel 94 rida<\/code><\/pre>\n<p><\/p>\n<p>Sellises vormis, nagu andmed andmestikus on salvestatud, on nendega t\u00f6\u00f6tamine \u00e4\u00e4rmiselt ebamugav, seet\u00f5ttu soovime luua andmestiku veergudega: <em>us_rent_income<\/em> rent <em>rent_moe<\/em>, <em>sissetulek<\/em>, <em>income_moe<\/em>, <em>. Spetsifikatsiooni loomise jaoks on palju v\u00f5imalusi, kuid peamine on see, et peame genereerima iga muutuja ja<\/em>estimate\/moe <em>, ning seej\u00e4rel genereerima veeru nime.<\/em>spec % \n    expand(variable, .value = c(\"estimate\", \"moe\")) %&gt;% \n    mutate(\n      .name = paste0(variable, ifelse(.value == \"moe\", \"_moe\", \"\"))\n    )<\/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>annab meile tulemuse, mida otsime: <code>pivot_wider()<\/code> us_rent_income %&gt;% pivot_wider(spec = spec)<\/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\">Maailmapank<\/h3>\n<p><\/p>\n<p>M\u00f5nikord n\u00f5uab andmestiku vormimist vajalikku vormi mitu sammu.<br \/>\nAndmestik <em>world_bank_pop<\/em> k\u00e4tkeb maailmapanga andmeid iga riigi rahvaarvu kohta ajavahemikul 2000\u20132018.<\/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>Meie eesm\u00e4rk on luua korralik andmestik, kus iga muutuja on eraldi veerus. Praegu pole selge, millised sammud on vajalikud, kuid alustame k\u00f5ige ilmsemast probleemist: aasta on jaotatud mitmesse veergu.<\/p>\n<p><\/p>\n<p>Selle parandamiseks tuleb kasutada funktsiooni <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>J\u00e4rgmine samm on arvestada muutuja 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>Kus SP.POP.GROW on rahvaarvu kasv, SP.POP.TOTL on kogurahvaarv ja SP.URB. * on sama, kuid ainult linnapiirkondade kohta. Jagame need v\u00e4\u00e4rtused kaheks muutujaks: area \u2014 piirkond (total v\u00f5i urban) ja muutuja, mis sisaldab tegelikke andmeid (population v\u00f5i 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>N\u00fc\u00fcd peame lihtsalt jagama muutuja variable kaheks veeruks:<\/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\">Kontaktide loend<\/h3>\n<p><\/p>\n<p>Viimane n\u00e4ide, kujutage ette, et teil on kontaktide nimekiri, mille olete kopeerinud ja kleepinud veebisaidilt:<\/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>Selle loendi tabelivormi viimine on \u00fcsna keeruline, kuna puudub muutuja, mis tuvastaks, millised andmed kuuluvad kellelegi kontaktilt. Saame selle parandada, m\u00e4rkides, et iga uue kontakti andmed algavad nimega (\"name\"), seega saame luua unikaalse identifikaatori ja suurendada seda \u00fchekaupa iga kord, kui veerus field esineb v\u00e4\u00e4rtus \"name\":<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">contacts &lt;- contacts %&gt;% \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>N\u00fc\u00fcd, kui meil on iga kontakti jaoks unikaalne id, saame p\u00f6\u00f6rata field ja value veergudesse:<\/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\">Kokkuv\u00f5te<\/h2>\n<p><\/p>\n<p>Isiklikult arvan, et uus kontseptsioon <strong>tidyr<\/strong> on t\u00f5eliselt intuitiivsem ja \u00fcletab oluliselt vananenud funktsioone. <code>spread()<\/code> ja <code>gather()<\/code>Loodan, et see artikkel aitas teil aru saada <code>pivot_longer()<\/code> ja <code>pivot_wider()<\/code>.<\/p>\n<p>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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 pakett tidyr ja selle uued funktsioonid pivot_longer ja pivot_wider | ProHoster","description":"Pakett tidyr kuulub R keele \u00fche populaarseima raamatukogu \u2014 tidyverse \u2014 tuumasse. Paketi p\u00f5hieesm\u00e4rk on andmete korralikuks muutmine. Habrast.","canonical_url":"https:\/\/prohoster.info\/et\/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":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/76291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=76291"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/76291\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/76292"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=76291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=76291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=76291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}