{"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> k\u00f5igest \u00fcks populaarsemaid R keele teeke \u2014 <strong>tidyverse<\/strong>.<br \/>\nPakkumise peamine eesm\u00e4rk on andmete korrektne vormindamine.<\/p>\n<p><\/p>\n<p>Habras on juba olemas <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/248741\/\">publikatsioon<\/a><\/noindex> selle paketile, kuid see on dateeritud 2015. aastaga. Soovin r\u00e4\u00e4kida k\u00f5ige olulisematest muudatustest, millest paar p\u00e4eva 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 aeglaseks?<\/p>\n<p><b>Hadley Wickham<\/b>: Teatud m\u00e4\u00e4ral. Me l\u00f5petame nende funktsioonide kasutamise soovitamise ja vigade parandamise, kuid need j\u00e4\u00e4vad paketti senisel kujul.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"soderzhanie\">Sisu<\/h2>\n<p><\/p>\n<p><em>Kui teid huvitab andmeanal\u00fc\u00fcs, siis v\u00f5ivad teile huvi pakkuda 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 sisust 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 teisendamisest laiast vormingust pika vorminguni ja vastupidi<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/ustnovka-naibolee-aktualnoy-versii-tidyr-0839000\">Tidyr 0.8.3.9000 k\u00f5ige v\u00e4rskema versiooni installimine<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#perehod-na-novye-funkcii\">Uutele funktsioonidele \u00fcleminek<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#prostoy-primer-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy\">Lihtne n\u00e4ide andmete teisendamisest laiast vormingust pika vorminguni<\/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\">Mitu v\u00e4\u00e4rtuse kasutamise spetsiifikatsioon (.value)<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#preobrazovanie-data-freymov-iz-dlinnogo-formata-k-shirokomu\">Andframe'ide teisendamine pikast vormingust laia vormingusse<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#prosteyshiy-primer-privedeniya-tablicy-k-shirokomu-formatu\">K\u00f5ige lihtsam n\u00e4ide tabeli viimisest laiasse vormingusse<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#generaciya-imeni-stolbca-iz-neskolkih-ishodnyh-peremennyh\">Veeru nime genereerimine mitmest algvariandist<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#neskolko-prodvinutyh-primerov-raboty-s-novoy-koncepciey-tidyr\">Mitmed edasij\u00f5udnud n\u00e4ited uue tidyr kontseptsiooni rakendamisest<\/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\u00fcriandmete komplekti 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 andmed viia nii nimetatud korrastatud vormi. Korrastatud andmed on andmed, kus: <\/p>\n<p><\/p>\n<ul>\n<li>Iga muutuja asub veerus. <\/li>\n<li>Iga vaatlus 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 teostamine 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 funktsioonide kogumit, mis on m\u00f5eldud tabelite muutmiseks:<\/p>\n<p><\/p>\n<ul>\n<li><code>fill()<\/code> \u2014 t\u00e4idab puuduvad v\u00e4\u00e4rtused veerus 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 teostab mitme v\u00e4lja \u00fchendamise \u00fcheks, vastandav tegevus funktsioonile <code>separate()<\/code>;<\/li>\n<li><code>pivot_longer()<\/code> \u2014 funktsioon, mis muundab andmed laias vormingus pikaks;<\/li>\n<li><code>pivot_wider()<\/code> \u2014 funktsioon, mis muundab andmed pikast vormingust laiaks. Tegevus on vastupidine funktsiooni <code>pivot_longer()<\/code>.<\/li>\n<li><code>gather()<\/code><strong>aegunud<\/strong> \u2014 funktsioon, mis muundab andmed laias vormingus pikaks;<\/li>\n<li><code>spread()<\/code><strong>aegunud<\/strong> \u2014 funktsioon, mis muundab andmed pikast vormingust laiaks. Tegevus on vastupidine funktsiooni <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 teisendamisest laiast vormingust pika vorminguni ja vastupidi<\/h2>\n<p><\/p>\n<p>Varem kasutati sarnaste transformatsioonide jaoks funktsioone <code>gather()<\/code> ja <code>spread()<\/code>. Aastate jooksul on nende funktsioonide kasutamise osas selgunud, et enamikule kasutajatest, sealhulgas paketi autorile, ei ole nende funktsioonide nimed ja argumendid olnud piisavalt selged, tekitades raskusi nende leidmisel ja m\u00f5istmisel, milline neist funktsioonidest muudab andmeframe laia formaadi pikkaks ja vastupidi.<\/p>\n<p><\/p>\n<p>Seet\u00f5ttu <strong>tidyr<\/strong> on lisatud kaks uut, olulist funktsiooni, mis on m\u00f5eldud andmeframe'i muutmiseks.<\/p>\n<p><\/p>\n<p>Uued funktsioonid <code>pivot_longer()<\/code> ja <code>pivot_wider()<\/code> on loodud inspiratsiooni saades m\u00f5nest funktsioonist paketist <strong>cdata<\/strong>, mille on v\u00e4lja t\u00f6\u00f6tanud John Mount ja Nina Zumel.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-naibolee-aktualnoy-versii-tidyr-0839000\">Tidyr 0.8.3.9000 k\u00f5ige v\u00e4rskema versiooni installimine<\/h3>\n<p><\/p>\n<p>Uue, k\u00f5ige v\u00e4rskema versiooni paigaldamiseks paketist <strong>tidyr<\/strong> <em>0.8.3.9000<\/em>, kus on saadaval uued funktsioonid, kasutage j\u00e4rgmisi koodi.<\/p>\n<p><\/p>\n<p><code>devtools::install_github(\"tidyverse\/tidyr\")<\/code><\/p>\n<p><\/p>\n<p>Artikli kirjutamise hetkel on need funktsioonid saadaval ainult GitHubi dev versioonis paketist.<\/p>\n<p><\/p>\n<h3 id=\"perehod-na-novye-funkcii\">Uutele funktsioonidele \u00fcleminek<\/h3>\n<p><\/p>\n<p>Tegelikult ei ole vanade skriptide uute funktsioonide kasutusele v\u00f5tmine keeruline, et paremini m\u00f5ista, toon n\u00e4ite vanade funktsioonide dokumentatsioonist ja n\u00e4itan, kuidas samu toiminguid teostatakse uute <code>pivot_*()<\/code> funktsioonide abil.<\/p>\n<p><\/p>\n<p>Laiast formaadist pikaks muutmine.<\/p>\n<p>\n<b class=\"spoiler_title\">Koodin\u00e4ide funktsiooni gather 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>Pikkforma muutmine laiaks.<\/p>\n<p>\n<b class=\"spoiler_title\">Koodin\u00e4ide 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 on t\u00f6\u00f6tamise osas <code>pivot_longer()<\/code> ja <code>pivot_wider()<\/code>, algses tabelis <em>lisamine MSI-sse (uus struktuur) ei too kaasa uute kirjete tekke.<\/em> ei ole tulpasid, mis on loetletud argumentides <em>names_to<\/em> ja <em>values_to<\/em> nende nimed tuleb panna jutum\u00e4rkidesse.<\/p>\n<p><\/p>\n<p>Tabel, mille abil on teil k\u00f5ige lihtsam aru saada, kuidas alustada uue kontseptsiooniga <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\">Autorilt m\u00e4rkus<\/h2>\n<p><\/p>\n<blockquote><p>K\u00f5ik edasine tekst on kohandatud, ma \u00fctleksin, et vaba t\u00f5lge <noindex><a rel=\"nofollow\" href=\"https:\/\/tidyr.tidyverse.org\/dev\/articles\/pivot.html\">vinjetid<\/a><\/noindex> tidyverse'i ametlikult veebisaidilt.<\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"prostoy-primer-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy\">Lihtne n\u00e4ide andmete teisendamisest laiast vormingust pika vorminguni<\/h2>\n<p><\/p>\n<p><code>pivot_longer ()<\/code> \u2014 pikendab andmekogumeid, 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>K\u00e4esolevas artiklis esitatud n\u00e4idete t\u00e4itmiseks tuleb esmalt lisada vajalikud paketid:<\/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\u00fcsitlustulemustega tabel, kus (muuhulgas) k\u00fcsiti inimesi nende usunde 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>See tabel sisaldab vastajate religiooniga seotud andmeid ridade kaupa, samas kui sissetuleku tase on jaotatud veergude nimetustes. Iga kategooria vastajate arv on talletatud lahtrite v\u00e4\u00e4rtustes, mis n\u00e4itavad religiooni ja sissetuleku taset. Tabeli toomiseks korralikku, \u00f5iget vormingusse, 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 \/ keeldus    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>, kirjeldab, millised veerud tuleb kokku liita. Antud juhul k\u00f5ik veerud, v\u00e4lja arvatud <em>aeg<\/em>.<\/li>\n<li>Argument <em>names_to<\/em> annab nime muutujale, mis luuakse veergude nimedest, mida me kokku liitsime.<\/li>\n<li><em>values_to<\/em> annab nime muutujale, mis luuakse andmetest, mis on talletatud lahtrite v\u00e4\u00e4rtustes kokku liidetud veergudest.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"specifikacii\">Spetsifikatsioonid<\/h2>\n<p><\/p>\n<p>See on uus funktsionaalsus pakendis <strong>tidyr<\/strong>, mis oli varem vanade funktsioonide kasutamisel k\u00e4ttesaamatu.<\/p>\n<p><\/p>\n<p>Spetsifikatsioon on andmeraam, mille iga rida vastab uue v\u00e4ljundi data frame'i \u00fchele veerule ja kahe eriveerule, mis algavad: <\/p>\n<p><\/p>\n<ul>\n<li><em>.nimi<\/em> sisaldab algset veeru nime. <\/li>\n<li><em>.value<\/em> sisaldab veeru nime, kuhu v\u00e4\u00e4rtused sisestatakse. <\/li>\n<\/ul>\n<p><\/p>\n<p>\u00dclej\u00e4\u00e4nud spetsifikatsiooni veerud peegeldavad, kuidas uues veerus kuvatakse tihendatud veergude nimed <em>.nimi<\/em>.<\/p>\n<p><\/p>\n<p>Spetsifikatsioon kirjeldab veeru nimesse salvestatud metaandmeid, iga veeru jaoks \u00fcks rida ja iga muutuja jaoks \u00fcks veerg, mis on \u00fchendatud veeru nimega; praegu tundub see m\u00e4\u00e4ratlemine v\u00f5ib-olla segane, kuid p\u00e4rast mitme n\u00e4ite vaatamist saab k\u00f5ik oluliselt selgemaks.<\/p>\n<p><\/p>\n<p>Spetsifikatsiooni m\u00f5te on see, et saate ekstrapoleerida, muuta ja m\u00e4\u00e4rata uusi metaandmeid muudetavasse data frame'i.<\/p>\n<p><\/p>\n<p>Spetsifikatsioonide t\u00f6\u00f6tlemiseks laua muutmisel laiast vormingust pikaks sobib funktsioon <code>pivot_longer_spec()<\/code>.<\/p>\n<p><\/p>\n<p>Kuidas see funktsioon t\u00f6\u00f6tab, see v\u00f5tab mistahes andmeraami ja koostab 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 pakub Maailma Terviseorganisatsioon tuberkuloosihaiguse 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;                                \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 koos 7,230 rohkem rea, ja 53 rohkem muutujat<\/code><\/pre>\n<p><\/p>\n<p>Loome 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>Muutujad <em>country<\/em>, <em>iso2<\/em>, <em>iso3<\/em> on juba muutujad. Meie \u00fclesanne on p\u00f6\u00f6rata veergudega. <em>new_sp_m014<\/em> kohta <em>newrel_f65<\/em>.<\/p>\n<p><\/p>\n<p>Selles veergu nimed sisaldavad j\u00e4rgmist teavet:<\/p>\n<p><\/p>\n<ul>\n<li>Eesliide <code>new_<\/code> n\u00e4itab, et veerg sisaldab andmeid tuberkuloosi uutest juhtumitest; praegune andmeframe sisaldab teavet ainult uute juhtumite kohta, seega ei oma see prefiks antud kontekstis mingit t\u00e4henduslikku koormust.<\/li>\n<li><code>sp<\/code>\/<code>rel<\/code>\/<code>sp<\/code>\/<code>ep<\/code> kirjeldab haiguse diagnoosimise viisi.<\/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 vanuser\u00fchm.<\/li>\n<\/ul>\n<p><\/p>\n<p>Saame neid veerge eraldada funktsiooni abil <code>extract()<\/code>, kasutades regulaaravatust.<\/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>.nimi<\/em> peaks j\u00e4\u00e4ma muutumatuks, kuna see on meie indeks veergude nimedes algses andmekogumis. <\/p>\n<p><\/p>\n<p>Sugu ja vanus (veergude <em>gender<\/em> ja <em>age<\/em>) omavad fikseeritud ja teadaolevaid v\u00e4\u00e4rtusi, seet\u00f5ttu 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 loodud spetsifikatsiooni algsele andmeframe'ile <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>Kogu see, mida me just tegime, v\u00f5ib visuaalselt kirjeldada 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\">Mitu v\u00e4\u00e4rtuse kasutamise spetsiifikatsioon (.value)<\/h2>\n<p><\/p>\n<p>\u00dclaltoodud n\u00e4ites sisaldas spetsifikatsiooni veerg <em>.value<\/em> ainult \u00fchte v\u00e4\u00e4rtust, mis on enamikul juhtudel t\u00f5si. <\/p>\n<p><\/p>\n<p>Kuid harva v\u00f5ib tekkida olukord, kus peate koguma v\u00e4\u00e4rtustes andmeid erinevate andmet\u00fc\u00fcpidega veergudest. Aegunud funktsiooni abil <code>spread()<\/code> oli seda \u00fcsna keeruline teha.<\/p>\n<p><\/p>\n<p>Allolev n\u00e4ide on laenatud <noindex><a rel=\"nofollow\" href=\"https:\/\/cran.r-project.org\/web\/packages\/data.table\/vignettes\/datatable-reshape.html\">vinjetid<\/a><\/noindex> paketist <strong>data.table<\/strong>.<\/p>\n<p><\/p>\n<p>Loome treeningandmestiku.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">perhe &lt;- tibble::tribble(\n  ~perhe,  ~dob_laps1,  ~dob_laps2, ~sugu_laps1, ~sugu_laps2,\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)\nperhe % 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 andmestik sisaldab igas reas andmeid \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 andmed igasuguse lapse kohta asuvad eraldi veergudes, meie \u00fclesanne on tuua need andmed anal\u00fc\u00fcsimiseks \u00f5iges vormingus.<\/p>\n<p><\/p>\n<p>Pange t\u00e4hele, et meil on iga lapse kohta kaks muutujat: tema sugu ja s\u00fcnnikuup\u00e4ev (veergude, mille eelnevad on <em>dop<\/em> sisaldavad s\u00fcnnikuup\u00e4eva, veergude, mille eelnevad on <em>gender<\/em> sisaldavad lapse soo). Oodatavas tulemuses peavad need olema eraldi veergudes. Saame seda teha, genereerides spetsifikatsiooni, kus veerg <code>.value<\/code> oma kaht erinevat v\u00e4\u00e4rtust.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec %\n  pivot_longer_spec(-perhe) %&gt;%\n  separate(col = name, into = c(\".value\", \"laps\")) %&gt;%\n  mutate(laps = parse_number(laps))\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 l\u00e4bi tegevused, mida \u00fclaltoodud kood teeb.<\/p>\n<p><\/p>\n<ul>\n<li><code>pivot_longer_spec(-family)<\/code> \u2014 loome spetsifikatsiooni, mis kokku surub k\u00f5ik olemasolevad veerud, v\u00e4lja arvatud veerg family.<\/li>\n<li><code>separate(col = name, into = c(\".value\", \"laps\"))<\/code> \u2014 jagame veeru <em>.nimi<\/em>, mis sisaldab algsete v\u00e4ljade nimesid, allajoonimise 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 muudetakse v\u00e4li <em>laps<\/em> tekstist numbriv\u00e4\u00e4rtuseks.<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00fc\u00fcd saame rakendada saadud spetsifikatsiooni algsele andmereale ja tuua tabeli soovitud vormi.<\/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 andmevorm sunnib looma ebavajalikke ridu mitteeksisteerivate vaatlustega. Kuna perel 2 on vaid \u00fcks laps, <code>na.rm = TRUE<\/code> tagab, et perel 2 on v\u00e4ljundandmetes vaid \u00fcks rida.<\/p>\n<p><\/p>\n<h2 id=\"preobrazovanie-data-freymov-iz-dlinnogo-formata-k-shirokomu\">Andframe'ide teisendamine pikast vormingust laia vormingusse<\/h2>\n<p><\/p>\n<p><code>pivot_wider()<\/code> \u2014 on tagasimuundamine, ja vastupidi suurendab andmeraami veergude arvu ridu v\u00e4hendades.<\/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>Sellist t\u00fc\u00fcpi muundamist kasutatakse \u00e4\u00e4rmiselt harva andmete korralikuks vormistamiseks, kuid see tehnika v\u00f5ib olla kasulik koost\u00f6\u00f6s aruande tabelite valmistamisel, mis on ette n\u00e4htud esitlusteks v\u00f5i integratsiooniks teiste t\u00f6\u00f6riistadega.<\/p>\n<p><\/p>\n<p>Tegelikult on funktsioonid <code>pivot_longer()<\/code> ja <code>pivot_wider()<\/code> s\u00fcmmeetrilised ja teevad teineteisele vastupidiseid toiminguid, st: <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> tagastab algse df.<\/p>\n<p><\/p>\n<h3 id=\"prosteyshiy-primer-privedeniya-tablicy-k-shirokomu-formatu\">K\u00f5ige lihtsam n\u00e4ide tabeli viimisest laiasse vormingusse<\/h3>\n<p><\/p>\n<p>Funktsiooni t\u00f6\u00f6 demonstreerimiseks <code>pivot_wider()<\/code> kasutame andmekogumit <em>fish_encounters<\/em>, mis sisaldab teavet selle kohta, kuidas erinevad jaamad fikseerivad kalade liikumist j\u00f5ges.<\/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>Enamikul juhtudel on see tabel informatiivsem ja mugavam kasutada, kui esitada iga jaama teave 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; # A 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;\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 rohkem muutujat: MAW<\/code><\/pre>\n<p><\/p>\n<p>See andmed salvestavad teavet ainult siis, kui kala on jaama poolt avastatud, st kui m\u00f5ni kala pole mingisuguse jaama poolt fikseeritud, ei ole neid andmeid tabelis. See t\u00e4hendab, et v\u00e4ljundandmed t\u00e4idetakse NA-ga. <\/p>\n<p><\/p>\n<p>Kuid sel juhul teame, et salvestuse puudumine t\u00e4hendab, et kala ei ole m\u00e4rgatud, seega v\u00f5ime kasutada argumenti <em>values_fill<\/em> funktsioonis <code>pivot_wider()<\/code> ja t\u00e4ita need puuduvad 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 algvariandist<\/h3>\n<p><\/p>\n<p>Kujutage ette, et meil on tabel, mis sisaldab toote, riigi ja aasta kombinatsiooni. Testandmestiku m\u00e4\u00e4ramiseks saab j\u00e4rgmise koodi k\u00e4ivitada:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">df %\n  filter((toode == \"A\" &amp; riik == \"AI\") | toode == \"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 andme raami nii, et \u00fcks veerg sisaldab andmeid iga toote ja riigi kombinatsiooni kohta. Selle saavutamiseks piisab, kui edastada argumenti <em>names_from<\/em> vektor, mis sisaldab \u00fchendatavaid v\u00e4ljade nimesid.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">df %&gt;% pivot_wider(names_from = c(toode, riik),\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>Te v\u00f5ite ka rakendada spetsifikatsioone sellele funktsioonile. <code>pivot_wider()<\/code>. Kuid esitamisel <code>pivot_wider()<\/code> spetsifikatsioon teostab vastupidise teisenduse <code>pivot_longer()<\/code>: luuakse veerud, mis on m\u00e4\u00e4ratud <em>.nimi<\/em>, kasutades v\u00e4\u00e4rtusi <em>.value<\/em> ja teistelt veergudelt.<\/p>\n<p><\/p>\n<p>Selle andmestiku jaoks v\u00f5ite genereerida kohandatud spetsifikatsiooni, kui soovite, et igal v\u00f5imaliku riigi ja toote kombinatsioonil oleks oma veerg, mitte ainult need, mis on andmetes:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec % \n  expand(toode, riik, .value = \"value\") %&gt;% \n  unite(\".name\", toode, riik, 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\">Mitmed edasij\u00f5udnud n\u00e4ited uue tidyr kontseptsiooni rakendamisest<\/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\u00fcriandmete komplekti n\u00e4itel<\/h3>\n<p><\/p>\n<p>Andmestik <em>us_rent_income<\/em> sisaldab teavet keskmise sissetuleku ja \u00fc\u00fcri kohta igas osariigis Ameerikas 2017. aastal (andmestik on saadaval paketis <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 veel 94 rida<\/code><\/pre>\n<p><\/p>\n<p>Sellisel kujul on andmed salvestatud andmestikus <em>us_rent_income<\/em> nendega t\u00f6\u00f6tamine on \u00e4\u00e4rmiselt ebamugav, seet\u00f5ttu sooviksime luua andmestiku, kus on veerud: <em>rent<\/em>, <em>rent_moe<\/em>, <em>come<\/em>, <em>income_moe<\/em>. On mitmeid viise, kuidas seda spetsifikatsiooni luua, kuid peamine on see, et peame genereerima iga muutujate v\u00e4\u00e4rtuse kombinatsiooni ja <em>estimate\/moe<\/em>, seej\u00e4rel genereerime veeru nime.<\/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>Selle spetsifikatsiooni esitamine <code>pivot_wider()<\/code> annab meile tulemuse, mida otsime:<\/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 andmekogumi viimine soovitud vormi mitmeid samme.<br \/>\nAndmestik <em>world_bank_pop<\/em> sisaldab Maailmapanga andmeid iga riigi rahvaarvu kohta aastatel 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 asub eraldi veerus. Hetkel pole selge, millised t\u00e4pselt sammud on vajalikud, kuid alustame k\u00f5ige ilmsema probleemiga: aasta on jaotatud mitmesse veergu.<\/p>\n<p><\/p>\n<p>Selle parandamiseks on vaja 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 vaadata muutujat 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 \u2013 rahvastiku kasv, SP.POP.TOTL \u2013 rahvastiku kogus, ning SP.URB. * on sama asi, kuid ainult linnapiirkondade kohta. Jagame need v\u00e4\u00e4rtused kahe muutujaga: area \u2013 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 vaid 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 viimine tabeli kujule on piisavalt keeruline, kuna puudub muutuja, mis identifitseeriks, millised andmed kuuluvad kellele. Saame seda parandada, m\u00e4rgates, et iga uue kontakti andmed algavad nimega (\"name\"), seega saame luua ainulaadse identifikaatori ja suurendada seda \u00fche v\u00f5rra iga kord, kui veerus field ilmub v\u00e4\u00e4rtus \"name\":<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">contacts % \n  mutate(\n    person_id = cumsum(field == \"name\")\n  )\ncontacts<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 6 x 3\n#&gt;   field   value            person_id\n#&gt;   &lt;chr&gt;   &lt;chr&gt;                &lt;int&gt;\n#&gt; 1 name    Jiena McLellan           1\n#&gt; 2 company Toyota                   1\n#&gt; 3 name    John Smith               2\n#&gt; 4 company google                   2\n#&gt; 5 email   john@google.com          2\n#&gt; 6 name    Huxley Ratcliffe         3<\/code><\/pre>\n<p><\/p>\n<p>N\u00fc\u00fcd, kui meil on iga kontakti jaoks ainulaadne identifikaator, saame p\u00f6\u00f6rata v\u00e4lja v\u00e4lja ja v\u00e4\u00e4rtuse 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 intuitiivselt arusaadavam ja \u00fcletab oluliselt vananenud funktsioone <code>spread()<\/code> ja <code>gather()<\/code>. Loodan, et see artikkel aitas teil paremini 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 4.9.10 - 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 \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.\" \/>\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) 4.9.10\" \/>\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 \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.\" \/>\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 on osa \u00fchest k\u00f5ige populaarsemast R keele raamatukogust \u2014 tidyverse. Paketi peamine eesm\u00e4rk on andmete s\u00fcstematiseerimine. Habr\u00e1s on juba olemas artikleid, mis k\u00e4sitlevad seda paketti, kuid need on dateeritud 2015. aastaga. Soovin r\u00e4\u00e4kida k\u00f5ige olulisematest muudatustest, millest m\u00f5ned p\u00e4evad tagasi teatas selle autor Hadley Wickham.","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 \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.","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"},"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}]}}