{"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\/hu\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider","title":{"rendered":"A tidyr csomag \u00e9s \u00faj funkci\u00f3i, a pivot_longer \u00e9s pivot_wider","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Csomag <strong>tidyr<\/strong> az R nyelv egyik legn\u00e9pszer\u0171bb k\u00f6nyvt\u00e1r\u00e1nak, a <strong>tidyverse<\/strong>.<br \/>\nf\u0151 funkci\u00f3ja az adatok rendezett megjelen\u00e9se.<\/p>\n<p><\/p>\n<p>A Habr-on m\u00e1r van egy <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/248741\/\">megjelent<\/a><\/noindex> e csomagnak szentelt bejegyz\u00e9s, de az 2015-b\u0151l dat\u00e1l\u00f3dik. \u00c9n azonban szeretn\u00e9m bemutatni a legfrissebb v\u00e1ltoz\u00e1sokat, amelyeket n\u00e9h\u00e1ny nappal ezel\u0151tt Hadley Wickham, a csomag szerz\u0151je jelentett be.<\/p>\n<p>\n<img decoding=\"async\" alt=\"A tidyr csomag \u00e9s \u00faj funkci\u00f3i, a pivot_longer \u00e9s pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/a290263b63aaea3db70e83a1ec411415.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p><b>SJK<\/b>: Az gather() \u00e9s spread() funkci\u00f3k elavultnak sz\u00e1m\u00edtanak majd?<\/p>\n<p><b>Hadley Wickham<\/b>: Valamilyen szempontb\u00f3l. Megsz\u00fcntetj\u00fck a haszn\u00e1latuk aj\u00e1nl\u00e1s\u00e1t \u00e9s a benn\u00fck l\u00e9v\u0151 hib\u00e1k jav\u00edt\u00e1s\u00e1t, de tov\u00e1bbra is jelen lesznek a csomagban a jelenlegi \u00e1llapotukban.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"soderzhanie\">Tartalom<\/h2>\n<p><\/p>\n<p><em>Ha \u00e9rdeklik az adatelemz\u00e9s, tal\u00e1n \u00e9rdekesek lesznek a <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/R4marketing\">telegram<\/a><\/noindex> \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/R4marketing\/?sub_confirmation=1\">youtube<\/a><\/noindex> csatorn\u00e1im. A tartalom nagy r\u00e9sze az R nyelvnek szentelt.<\/em><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#koncepciya-tidydata\">A TidyData koncepci\u00f3ja<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#osnovnye-funkcii-vhodyaschie-v-paket-tydir\">A tidyr csomagba tartoz\u00f3 f\u0151bb funkci\u00f3k<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#novaya-koncepciya-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy-i-naoborot\">\u00daj koncepci\u00f3 az adatok sz\u00e9les form\u00e1tumb\u00f3l hossz\u00faba \u00e9s vissza \u00e1talak\u00edt\u00e1s\u00e1ra<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/ustnovka-naibolee-aktualnoy-versii-tidyr-0839000\">A legfrissebb tidyr 0.8.3.9000 verzi\u00f3 telep\u00edt\u00e9se<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#perehod-na-novye-funkcii\">\u00c1tt\u00e9r\u00e9s az \u00faj funkci\u00f3kra<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#prostoy-primer-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy\">Egyszer\u0171 p\u00e9lda az adatok sz\u00e9les form\u00e1tumb\u00f3l hossz\u00faba val\u00f3 \u00e1talak\u00edt\u00e1s\u00e1ra<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#specifikacii\">Specifik\u00e1ci\u00f3k<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#specifikaciya-s-ispolzovaniem-neskolkih-znacheniyvalue\">Specifik\u00e1ci\u00f3 t\u00f6bb \u00e9rt\u00e9k (.value) haszn\u00e1lat\u00e1val<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#preobrazovanie-data-freymov-iz-dlinnogo-formata-k-shirokomu\">Adatkeretek \u00e1talak\u00edt\u00e1sa hossz\u00fa form\u00e1tumb\u00f3l sz\u00e9les form\u00e1tumba<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#prosteyshiy-primer-privedeniya-tablicy-k-shirokomu-formatu\">Egyszer\u0171 p\u00e9lda egy t\u00e1bl\u00e1zat sz\u00e9les form\u00e1tumba val\u00f3 \u00e1talak\u00edt\u00e1s\u00e1ra<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#generaciya-imeni-stolbca-iz-neskolkih-ishodnyh-peremennyh\">Oszlopn\u00e9v gener\u00e1l\u00e1sa t\u00f6bb forr\u00e1sv\u00e1ltoz\u00f3b\u00f3l<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#neskolko-prodvinutyh-primerov-raboty-s-novoy-koncepciey-tidyr\">T\u00f6bb halad\u00f3 p\u00e9lda az \u00faj tidyr koncepci\u00f3 m\u0171k\u00f6d\u00e9s\u00e9re<\/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\">Adatok rendezett megjelen\u00e9se az Egyes\u00fclt \u00c1llamok j\u00f6vedelmi \u00e9s b\u00e9rleti adatainak n\u00e9psz\u00e1ml\u00e1l\u00e1sa alapj\u00e1n<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#vsemirnyy-bank\">Vil\u00e1gbank<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#spisok-kontaktov\">Kapcsolatok list\u00e1ja<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#zaklyuchenie\">Z\u00e1r\u00e1s<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"koncepciya-tidydata\">A TidyData koncepci\u00f3ja<\/h2>\n<p><\/p>\n<p>C\u00e9l <strong>tidyr<\/strong> \u2013 seg\u00edteni fog \u00f6nnek az adatok \u00fagynevezett rendezett megjelen\u00e9s\u00e9nek kialak\u00edt\u00e1s\u00e1ban. A rendezett adatok azok, ahol: <\/p>\n<p><\/p>\n<ul>\n<li>Minden v\u00e1ltoz\u00f3 oszlopban tal\u00e1lhat\u00f3. <\/li>\n<li>Minden megfigyel\u00e9s egy sor. <\/li>\n<li>Minden \u00e9rt\u00e9k egy cella.<\/li>\n<\/ul>\n<p><\/p>\n<p>A rendezett adatokkal jelent\u0151sen egyszer\u0171bb \u00e9s k\u00e9nyelmesebb dolgozni az elemz\u00e9s sor\u00e1n.<\/p>\n<p><\/p>\n<h2 id=\"osnovnye-funkcii-vhodyaschie-v-paket-tidyr\">A tidyr csomagba tartoz\u00f3 f\u0151bb funkci\u00f3k<\/h2>\n<p><\/p>\n<p>A tidyr egy funkci\u00f3k\u00e9szletet tartalmaz, amely a t\u00e1bl\u00e1zatok \u00e1talak\u00edt\u00e1s\u00e1ra szolg\u00e1l:<\/p>\n<p><\/p>\n<ul>\n<li><code>fill()<\/code> \u2013 hi\u00e1nyz\u00f3 \u00e9rt\u00e9kek kit\u00f6lt\u00e9se egy oszlopban az el\u0151z\u0151 \u00e9rt\u00e9kekkel;<\/li>\n<li><code>separate()<\/code> \u2013 egy mez\u0151 feloszt\u00e1sa t\u00f6bb r\u00e9szre egy elv\u00e1laszt\u00f3 seg\u00edts\u00e9g\u00e9vel;<\/li>\n<li><code>unite()<\/code> \u2013 t\u00f6bb mez\u0151 egybevon\u00e1sa egybe, ennek hat\u00e1sa ellent\u00e9tes a <code>separate()<\/code>;<\/li>\n<li><code>pivot_longer()<\/code> \u2013 funkci\u00f3, amely az adatokat sz\u00e9les form\u00e1tumb\u00f3l hossz\u00fav\u00e1 alak\u00edtja;<\/li>\n<li><code>pivot_wider()<\/code> \u2014 funkci\u00f3, amely az adatokat hossz\u00fa form\u00e1tumb\u00f3l sz\u00e9les form\u00e1tumba alak\u00edtja. A m\u0171velet ellent\u00e9tes azzal, amit a funkci\u00f3 v\u00e9gez <code>pivot_longer()<\/code>.<\/li>\n<li><code>gather()<\/code><strong>elavult<\/strong> \u2013 funkci\u00f3, amely az adatokat sz\u00e9les form\u00e1tumb\u00f3l hossz\u00fav\u00e1 alak\u00edtja;<\/li>\n<li><code>spread()<\/code><strong>elavult<\/strong> \u2014 funkci\u00f3, amely az adatokat hossz\u00fa form\u00e1tumb\u00f3l sz\u00e9les form\u00e1tumba alak\u00edtja. A m\u0171velet ellent\u00e9tes azzal, amit a funkci\u00f3 v\u00e9gez <code>gather()<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"novaya-koncepciya-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy-i-naoborot\">\u00daj koncepci\u00f3 az adatok sz\u00e9les form\u00e1tumb\u00f3l hossz\u00faba \u00e9s vissza \u00e1talak\u00edt\u00e1s\u00e1ra<\/h2>\n<p><\/p>\n<p>Kor\u00e1bban hasonl\u00f3 t\u00edpus\u00fa \u00e1talak\u00edt\u00e1sra haszn\u00e1lt\u00e1k a funkci\u00f3kat <code>gather()<\/code> \u00e9s <code>spread()<\/code>. Az \u00e9vek sor\u00e1n vil\u00e1goss\u00e1 v\u00e1lt, hogy a felhaszn\u00e1l\u00f3k t\u00f6bbs\u00e9ge, bele\u00e9rtve a csomag szerz\u0151j\u00e9t is, sz\u00e1m\u00e1ra a funkci\u00f3k elnevez\u00e9sei \u00e9s param\u00e9terei nem voltak egy\u00e9rtelm\u0171ek, \u00e9s neh\u00e9zs\u00e9get okoztak a keres\u00e9sben \u00e9s abban, hogy meg\u00e9rts\u00e9k, melyik funkci\u00f3 alak\u00edtja \u00e1t az adatkeretet sz\u00e9lesb\u0151l hossz\u00fa form\u00e1tumba, \u00e9s ford\u00edtva.<\/p>\n<p><\/p>\n<p>Ez\u00e9rt a <strong>tidyr<\/strong> csomagba k\u00e9t \u00faj, fontos funkci\u00f3t adtak hozz\u00e1, amelyek az adatkeretek \u00e1talak\u00edt\u00e1s\u00e1ra szolg\u00e1lnak.<\/p>\n<p><\/p>\n<p>Az \u00faj funkci\u00f3k <code>pivot_longer()<\/code> \u00e9s <code>pivot_wider()<\/code> a cdata csomag bizonyos funkci\u00f3inak ihlet\u00e9se nyom\u00e1n k\u00e9sz\u00fcltek <strong>, amelyet John Mount \u00e9s Nina Zumel k\u00e9sz\u00edtett.<\/strong>A csomag leg\u00fajabb verzi\u00f3j\u00e1nak telep\u00edt\u00e9s\u00e9hez, amely tartalmazza az \u00faj funkci\u00f3kat, haszn\u00e1lja az al\u00e1bbi k\u00f3dot.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-naibolee-aktualnoy-versii-tidyr-0839000\">A legfrissebb tidyr 0.8.3.9000 verzi\u00f3 telep\u00edt\u00e9se<\/h3>\n<p><\/p>\n<p>devtools::install_github(\"tidyverse\/tidyr\") <strong>tidyr<\/strong> <em>0.8.3.9000<\/em>A cikk \u00edr\u00e1s\u00e1nak id\u0151pontj\u00e1ban ezek a funkci\u00f3k csak a csomag dev verzi\u00f3j\u00e1ban \u00e9rhet\u0151k el GitHubon.<\/p>\n<p><\/p>\n<p><code>devtools::install_github(\"tidyverse\/tidyr\")<\/code><\/p>\n<p><\/p>\n<p>pivot_*()<\/p>\n<p><\/p>\n<h3 id=\"perehod-na-novye-funkcii\">\u00c1tt\u00e9r\u00e9s az \u00faj funkci\u00f3kra<\/h3>\n<p><\/p>\n<p>funkci\u00f3kkal. <code>A sz\u00e9les form\u00e1tum hossz\u00fa form\u00e1tumba alak\u00edt\u00e1sa.<\/code> P\u00e9lda a gather funkci\u00f3 dokument\u00e1ci\u00f3j\u00e1b\u00f3l<\/p>\n<p><\/p>\n<p>A hossz\u00fa form\u00e1tum sz\u00e9les form\u00e1tumba alak\u00edt\u00e1sa.<\/p>\n<p>\n<b class=\"spoiler_title\">P\u00e9lda a spread funkci\u00f3 dokument\u00e1ci\u00f3j\u00e1b\u00f3l<\/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>Mivel a fenti p\u00e9ld\u00e1kban dolgoztunk<\/p>\n<p>\n<b class=\"spoiler_title\">, az eredeti t\u00e1bl\u00e1zatban<\/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>stocks <code>pivot_longer()<\/code> \u00e9s <code>pivot_wider()<\/code>nincsenek az arguments param\u00e9tereiben felsorolt oszlopok <em>names_to<\/em> values_to <em>neveit id\u00e9z\u0151jelekben kell megadni.<\/em> \u00e9s <em>Az a t\u00e1bl\u00e1zat, amellyel a legk\u00f6nnyebben meg\u00e9rtheti, hogyan \u00e1llhat \u00e1t az \u00faj koncepci\u00f3ra.<\/em> Megjegyz\u00e9s a szerz\u0151t\u0151l<\/p>\n<p><\/p>\n<p>A k\u00f6vetkez\u0151t tudom\u00e1nyos sz\u00f6veg szabad ford\u00edt\u00e1sa <strong>tidyr<\/strong>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A tidyr csomag \u00e9s \u00faj funkci\u00f3i, a pivot_longer \u00e9s 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\">a tidyverse k\u00f6nyvt\u00e1r hivatalos weboldal\u00e1r\u00f3l.<\/h2>\n<p><\/p>\n<blockquote><p>pivot_longer () <noindex><a rel=\"nofollow\" href=\"https:\/\/tidyr.tidyverse.org\/dev\/articles\/pivot.html\">\u2014 hosszabb\u00e1 teszi az adatokat, cs\u00f6kkentve az oszlopok sz\u00e1m\u00e1t \u00e9s n\u00f6velve a sorok sz\u00e1m\u00e1t.<\/a><\/noindex> A cikkben bemutatott p\u00e9ld\u00e1k v\u00e9grehajt\u00e1s\u00e1hoz el\u0151sz\u00f6r be kell t\u00f6lteni a sz\u00fcks\u00e9ges csomagokat:<\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"prostoy-primer-preobrazovaniya-dannyh-iz-shirokogo-formata-v-dlinnyy\">Egyszer\u0171 p\u00e9lda az adatok sz\u00e9les form\u00e1tumb\u00f3l hossz\u00faba val\u00f3 \u00e1talak\u00edt\u00e1s\u00e1ra<\/h2>\n<p><\/p>\n<p><code>library(tidyr)\nlibrary(dplyr)\nlibrary(readr)<\/code> Tegy\u00fck fel, hogy van egy t\u00e1bl\u00e1zatunk a felm\u00e9r\u00e9s eredm\u00e9nyeir\u0151l, amelyben (t\u00f6bbek k\u00f6z\u00f6tt) megk\u00e9rdezt\u00e9k az embereket vall\u00e1sukr\u00f3l \u00e9s \u00e9ves j\u00f6vedelm\u00fckr\u0151l:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A tidyr csomag \u00e9s \u00faj funkci\u00f3i, a pivot_longer \u00e9s pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/fc88b99f2fecdcdaa6179d2e7d29e59d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A cikkben bemutatott p\u00e9ld\u00e1k v\u00e9grehajt\u00e1s\u00e1hoz el\u0151sz\u00f6r a sz\u00fcks\u00e9ges csomagokat kell telep\u00edteni:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">library(tidyr)\nlibrary(dplyr)\nlibrary(readr)<\/code><\/pre>\n<p><\/p>\n<p>Tegy\u00fck fel, hogy van egy t\u00e1bl\u00e1zatunk a felm\u00e9r\u00e9s eredm\u00e9nyeivel, ahol (t\u00f6bbek k\u00f6z\u00f6tt) arra k\u00e9rdezt\u00fck az embereket, hogy mi a vall\u00e1suk \u00e9s milyen \u00e9ves j\u00f6vedelm\u00fck van:<\/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>Ez a t\u00e1bl\u00e1zat a v\u00e1laszad\u00f3k vall\u00e1si hovatartoz\u00e1s\u00e1r\u00f3l tartalmaz adatokat a sorokban, m\u00edg a j\u00f6vedelem szintje az oszlopnevek k\u00f6z\u00f6tt tal\u00e1lhat\u00f3. Minden kateg\u00f3ri\u00e1b\u00f3l sz\u00e1rmaz\u00f3 v\u00e1laszad\u00f3k sz\u00e1ma a vall\u00e1s \u00e9s a j\u00f6vedelem szintj\u00e9nek metsz\u00e9spontj\u00e1ban tal\u00e1lhat\u00f3 cell\u00e1k \u00e9rt\u00e9keiben t\u00e1rol\u00f3dik. A t\u00e1bl\u00e1zat helyes, rendezett form\u00e1tumban val\u00f3 megjelen\u00edt\u00e9s\u00e9hez elegend\u0151 haszn\u00e1lni <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 Agnosztikus   2 Agnosztikus 10-20 ezer       34\n#&gt;  3 Agnosztikus 20-30 ezer       60\n#&gt;  4 Agnosztikus 30-40 ezer       81\n#&gt;  5 Agnosztikus 40-50 ezer       76\n#&gt;  6 Agnosztikus 50-75 ezer      137\n#&gt;  7 Agnosztikus 75-100 ezer     122\n#&gt;  8 Agnosztikus 100-150 ezer    109\n#&gt;  9 Agnosztikus &gt;150 ezer        84\n#&gt; 10 Agnosztikus Nem tudom\/visszautas\u00edtotta 96\n#&gt; # \u2026 \u00f6sszesen 170 tov\u00e1bbi sor<\/code><\/pre>\n<p><\/p>\n<p>A f\u00fcggv\u00e9ny argumentumai <code>pivot_longer()<\/code><\/p>\n<p><\/p>\n<ul>\n<li>Az els\u0151 argumentum <em>cols<\/em>, le\u00edrja, hogy mely oszlopokat kell egyes\u00edteni. Jelen esetben az \u00f6sszes oszlop, kiv\u00e9ve <em>time<\/em>.<\/li>\n<li>Az argumentum <em>neveit id\u00e9z\u0151jelekben kell megadni.<\/em> nevet ad a v\u00e1ltoz\u00f3nak, amely a kombin\u00e1lt oszlopnevekb\u0151l sz\u00e1rmazik.<\/li>\n<li><em>Az a t\u00e1bl\u00e1zat, amellyel a legk\u00f6nnyebben meg\u00e9rtheti, hogyan \u00e1llhat \u00e1t az \u00faj koncepci\u00f3ra.<\/em> nevet ad a v\u00e1ltoz\u00f3nak, amely az egyes\u00edtett oszlopok cella\u00e9rt\u00e9keib\u0151l sz\u00e1rmazik.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"specifikacii\">Specifik\u00e1ci\u00f3k<\/h2>\n<p><\/p>\n<p>Ez a funkci\u00f3 a <strong>tidyr<\/strong>, amely kor\u00e1bban el\u00e9rhetetlen volt a r\u00e9gi f\u00fcggv\u00e9nyek haszn\u00e1lata sor\u00e1n.<\/p>\n<p><\/p>\n<p>A specifik\u00e1ci\u00f3 egy adathalmaz, amelynek minden sora egy \u00faj kimeneti adathalmaz egy oszlop\u00e1hoz kapcsol\u00f3dik, \u00e9s k\u00e9t speci\u00e1lis oszlopa van, amelyek .-val kezd\u0151dnek: <\/p>\n<p><\/p>\n<ul>\n<li><em>.n\u00e9v<\/em> tartalmazza az eredeti oszlop nev\u00e9t. <\/li>\n<li><em>.value<\/em> tartalmazza azt az oszlopnevet, ahov\u00e1 a cell\u00e1k \u00e9rt\u00e9kei ker\u00fclnek. <\/li>\n<\/ul>\n<p><\/p>\n<p>A specifik\u00e1ci\u00f3 t\u00f6bbi oszlopa azt mutatja, hogy az \u00faj oszlopban hogyan jelennek meg a t\u00f6m\u00f6r\u00edtett oszlopnevek <em>.n\u00e9v<\/em>.<\/p>\n<p><\/p>\n<p>A specifik\u00e1ci\u00f3 le\u00edrja a metadat\u00e1kat, amelyek az oszlopnev\u00e9ben t\u00e1rol\u00f3dnak, minden oszlophoz egy sor, \u00e9s egy oszlop az egyes\u00edtett v\u00e1ltoz\u00f3k sz\u00e1m\u00e1ra, val\u00f3sz\u00edn\u0171leg most ez a meghat\u00e1roz\u00e1s zavarosnak t\u0171nik, de n\u00e9h\u00e1ny p\u00e9lda ut\u00e1n sokkal vil\u00e1gosabb\u00e1 v\u00e1lik.<\/p>\n<p><\/p>\n<p>A specifik\u00e1ci\u00f3 l\u00e9nyege, hogy lehet\u0151v\u00e9 teszi az \u00faj metadat\u00e1k kinyer\u00e9s\u00e9t, m\u00f3dos\u00edt\u00e1s\u00e1t \u00e9s be\u00e1ll\u00edt\u00e1s\u00e1t a konvert\u00e1lt adathalmazon.<\/p>\n<p><\/p>\n<p>A t\u00e1bl\u00e1zat sz\u00e9les form\u00e1tumb\u00f3l hossz\u00fa form\u00e1tumba val\u00f3 \u00e1talak\u00edt\u00e1s\u00e1hoz a speciifik\u00e1ci\u00f3kkal a k\u00f6vetkez\u0151 f\u00fcggv\u00e9ny szolg\u00e1l <code>pivot_longer_spec()<\/code>.<\/p>\n<p><\/p>\n<p>Hogyan m\u0171k\u00f6dik ez a funkci\u00f3, veszi b\u00e1rmely adatkeretet, \u00e9s l\u00e9trehozza annak metaadatait a fent le\u00edrt m\u00f3don. <\/p>\n<p><\/p>\n<p>P\u00e9ld\u00e1ul vegy\u00fck a who adatb\u00e1zist, amely a csomaggal egy\u00fctt \u00e9rkezik. <strong>tidyr<\/strong>Ez az adatb\u00e1zis az Eg\u00e9szs\u00e9g\u00fcgyi Vil\u00e1gszervezet \u00e1ltal szolg\u00e1ltatott tuberkul\u00f3zis el\u0151fordul\u00e1si adatait tartalmazza.<\/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;#        &lt;chr&gt; &lt;int&gt;       &lt;int&gt;        &lt;int&gt;        &lt;int&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 with 7,230 more rows, and 53 more variables<\/code><\/pre>\n<p><\/p>\n<p>K\u00e9sz\u00edts\u00fck el a specifik\u00e1ci\u00f3j\u00e1t.<\/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>Mez\u0151k <em>country<\/em>, <em>iso2<\/em>, <em>iso3<\/em> m\u00e1r v\u00e1ltoz\u00f3k. Feladatunk az oszlopok megford\u00edt\u00e1sa a <em>new_sp_m014<\/em> hogy <em>newrel_f65<\/em>.<\/p>\n<p><\/p>\n<p>Ezekben az oszlopok neveiben a k\u00f6vetkez\u0151 inform\u00e1ci\u00f3k tal\u00e1lhat\u00f3k:<\/p>\n<p><\/p>\n<ul>\n<li>Prefix <code>new_<\/code> arra utal, hogy az oszlop a tuberkul\u00f3zis \u00faj esetform\u00e1ir\u00f3l tartalmaz adatokat, a jelenlegi adatkeret csak \u00faj megbeteged\u00e9sekr\u0151l tartalmaz inform\u00e1ci\u00f3t, ez\u00e9rt a jelen kontextusban ez a prefix nem hordoz jelent\u00e9startalmat.<\/li>\n<li><code>sp<\/code>\/<code>rel<\/code>\/<code>sp<\/code>\/<code>ep<\/code> le\u00edrja a betegs\u00e9g diagnosztiz\u00e1l\u00e1s\u00e1nak m\u00f3dj\u00e1t.<\/li>\n<li><code>m<\/code>\/<code>f<\/code> a beteg neme.<\/li>\n<li><code>014<\/code>\/<code>1524<\/code>\/<code>2535<\/code>\/<code>3544<\/code>\/<code>4554<\/code>\/<code>65<\/code> a beteg \u00e9letkora.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ezeket az oszlopokat a <code>extract()<\/code>seg\u00edts\u00e9g\u00e9vel el tudjuk v\u00e1lasztani, haszn\u00e1lva egy regul\u00e1ris kifejez\u00e9st.<\/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>Ne feledje, hogy az oszlop <em>.n\u00e9v<\/em> v\u00e1ltozatlan marad, mivel ez a mi index\u00fcnk az eredeti adatb\u00e1zis oszlopneveiben. <\/p>\n<p><\/p>\n<p>A nem \u00e9s az \u00e9letkor (oszlopok <em>gender<\/em> \u00e9s <em>age<\/em>) v\u00e1ltoz\u00f3 \u00e9rt\u00e9kekkel rendelkeznek, ez\u00e9rt aj\u00e1nlott ezeket az oszlopokat faktork\u00e9nt kezelni:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec %\n            mutate(\n              gender = factor(gender, levels = c(\"n\u0151\", \"f\u00e9rfi\")),\n              age = factor(age, levels = unique(age), ordered = TRUE)\n            ) <\/code><\/pre>\n<p><\/p>\n<p>V\u00e9g\u00fcl, hogy az \u00e1ltalunk l\u00e9trehozott specifik\u00e1ci\u00f3t alkalmazzuk az eredeti adatkeretre, <em>who<\/em> haszn\u00e1lni kell az argumentumot <em>spec<\/em> a funkci\u00f3ban <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>Amit \u00e9ppen most tett\u00fcnk, azt v\u00e1zlatosan a k\u00f6vetkez\u0151k\u00e9ppen \u00e1br\u00e1zolhatjuk:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A tidyr csomag \u00e9s \u00faj funkci\u00f3i, a pivot_longer \u00e9s 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\">Specifik\u00e1ci\u00f3 t\u00f6bb \u00e9rt\u00e9k (.value) haszn\u00e1lat\u00e1val<\/h2>\n<p><\/p>\n<p>A fenti p\u00e9ld\u00e1ban a specifik\u00e1ci\u00f3s oszlop <em>.value<\/em> csak egy \u00e9rt\u00e9ket tartalmazott, ami a legt\u00f6bb esetben \u00edgy van. <\/p>\n<p><\/p>\n<p>De ritk\u00e1n el\u0151fordulhat olyan helyzet, amikor t\u00f6bbf\u00e9le adatot kell \u00f6sszegy\u0171jteni oszlopokb\u00f3l k\u00fcl\u00f6nb\u00f6z\u0151 adatt\u00edpusokkal. A r\u00e9gi funkci\u00f3val <code>spread()<\/code> ez meglehet\u0151sen bonyolult lett volna.<\/p>\n<p><\/p>\n<p>Az al\u00e1bbi p\u00e9lda a <noindex><a rel=\"nofollow\" href=\"https:\/\/cran.r-project.org\/web\/packages\/data.table\/vignettes\/datatable-reshape.html\">\u2014 hosszabb\u00e1 teszi az adatokat, cs\u00f6kkentve az oszlopok sz\u00e1m\u00e1t \u00e9s n\u00f6velve a sorok sz\u00e1m\u00e1t.<\/a><\/noindex> csomagb\u00f3l sz\u00e1rmazik. <strong>data.table<\/strong>.<\/p>\n<p><\/p>\n<p>Hozzunk l\u00e9tre egy gyakorlati adatkeretet.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">csal\u00e1d &lt;- tibble::tribble(\n  ~csal\u00e1d,  ~sz\u00fclet\u00e9si_d\u00e1tum1,  ~sz\u00fclet\u00e9si_d\u00e1tum2, ~nem1, ~nem2,\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)\ncsal\u00e1d % mutate_at(vars(starts_with(\"sz\u00fclet\u00e9si_d\u00e1tum\")), 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>A l\u00e9trehozott adatkeretben minden sor egy csal\u00e1d gyermekeihez tartoz\u00f3 adatokat tartalmaz. A csal\u00e1dokban lehet egy vagy k\u00e9t gyermek. Minden gyermek eset\u00e9ben rendelkez\u00e9sre \u00e1llnak a sz\u00fclet\u00e9si d\u00e1tummal \u00e9s nemmel kapcsolatos adatok, \u00e9s ezek az adatok k\u00fcl\u00f6n oszlopokban tal\u00e1lhat\u00f3k, a feladatunk pedig az, hogy ezeket az adatokat a megfelel\u0151 elemz\u00e9si form\u00e1tumba hozzuk.<\/p>\n<p><\/p>\n<p>Vegy\u00fck \u00e9szre, hogy k\u00e9t v\u00e1ltoz\u00f3nk van minden gyermek inform\u00e1ci\u00f3j\u00e1ra: a neme \u00e9s a sz\u00fclet\u00e9si d\u00e1tuma (a <em>dob<\/em> el\u0151tag\u00fa oszlopok tartalmazz\u00e1k a sz\u00fclet\u00e9si d\u00e1tumot, m\u00edg az <em>gender<\/em> el\u0151tag\u00fa oszlopok a gyermek nem\u00e9t tartalmazz\u00e1k). A v\u00e1rt eredm\u00e9nyben ezek k\u00fcl\u00f6n oszlopokban kellene, hogy szerepeljenek. Ezt \u00fagy \u00e9rhetj\u00fck el, hogy egy specifik\u00e1ci\u00f3t gener\u00e1lunk, amelyben a <code>.value<\/code> oszlopnak k\u00e9t k\u00fcl\u00f6nb\u00f6z\u0151 \u00e9rt\u00e9ke lesz.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec %\n  pivot_longer_spec(-csal\u00e1d) %&gt;%\n  separate(col = name, into = c(\".value\", \"gyermek\")) %&gt;%\n  mutate(gyermek = parse_number(gyermek))\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>Teh\u00e1t n\u00e9zz\u00fck l\u00e9p\u00e9sr\u0151l l\u00e9p\u00e9sre, hogy a fenti k\u00f3d mit csin\u00e1l.<\/p>\n<p><\/p>\n<ul>\n<li><code>pivot_longer_spec(-family)<\/code> \u2014 egy specifik\u00e1ci\u00f3t hozunk l\u00e9tre, amely \u00f6sszevonja az \u00f6sszes megl\u00e9v\u0151 oszlopot, kiv\u00e9ve a family oszlopot.<\/li>\n<li><code>separate(col = name, into = c(\".value\", \"gyermek\"))<\/code> \u2014 szepar\u00e1ljuk a <em>.n\u00e9v<\/em>oszlopot, amely az eredeti mez\u0151k neveit tartalmazza, als\u00f3 vonalas elv\u00e1laszt\u00e1ssal, \u00e9s az \u00edgy kapott \u00e9rt\u00e9keket oszlopokba helyezz\u00fck. <em>.value<\/em> \u00e9s <em>child<\/em>.<\/li>\n<li><code>mutate(child = parse_number(child))<\/code> \u2014 a <em>child<\/em> mez\u0151 \u00e9rt\u00e9keit sz\u00f6vegesb\u0151l numerikus adatt\u00edpusra konvert\u00e1ljuk.<\/li>\n<\/ul>\n<p><\/p>\n<p>Most alkalmazhatjuk a megadott specifik\u00e1ci\u00f3t az eredeti adatkeretre, \u00e9s \u00e1talak\u00edthatjuk a t\u00e1bl\u00e1zatot a k\u00edv\u00e1nt form\u00e1tumba.<\/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>A na.rm = TRUE param\u00e9tert haszn\u00e1ljuk. <code>na.rm = TRUE<\/code>, mert a jelenlegi adatforma sz\u00fcks\u00e9gtelen sorok l\u00e9trehoz\u00e1s\u00e1t k\u00e9nyszer\u00edti a nem l\u00e9tez\u0151 megfigyel\u00e9sekhez. Mivel a 2. csal\u00e1dnak csak egy gyermeke van, <code>na.rm = TRUE<\/code> garant\u00e1lja, hogy a 2. csal\u00e1dnak egy sora lesz a kimeneti adatokban.<\/p>\n<p><\/p>\n<h2 id=\"preobrazovanie-data-freymov-iz-dlinnogo-formata-k-shirokomu\">Adatkeretek \u00e1talak\u00edt\u00e1sa hossz\u00fa form\u00e1tumb\u00f3l sz\u00e9les form\u00e1tumba<\/h2>\n<p><\/p>\n<p><code>pivot_wider()<\/code> \u2014 a visszafel\u00e9 t\u00f6rt\u00e9n\u0151 \u00e1talak\u00edt\u00e1s, \u00e9s ez\u00e1ltal n\u00f6veli az adatkeret oszlopainak sz\u00e1m\u00e1t a sorok sz\u00e1m\u00e1nak cs\u00f6kkent\u00e9s\u00e9vel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A tidyr csomag \u00e9s \u00faj funkci\u00f3i, a pivot_longer \u00e9s pivot_wider\" src=\"\/wp-content\/uploads\/2020\/04\/b470664e06f362d6f0ea6df9c1ed426d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az ilyen t\u00edpus\u00fa \u00e1talak\u00edt\u00e1s rendk\u00edv\u00fcl ritk\u00e1n haszn\u00e1latos az adatok megfelel\u0151 form\u00e1ba hoz\u00e1s\u00e1ra, mindazon\u00e1ltal ez a technika hasznos lehet a prezent\u00e1ci\u00f3khoz haszn\u00e1lt \u00f6sszes\u00edt\u0151 t\u00e1bl\u00e1zatok k\u00e9sz\u00edt\u00e9s\u00e9hez, vagy m\u00e1s eszk\u00f6z\u00f6kkel val\u00f3 integr\u00e1ci\u00f3hoz.<\/p>\n<p><\/p>\n<p>Val\u00f3j\u00e1ban a funkci\u00f3k <code>pivot_longer()<\/code> \u00e9s <code>pivot_wider()<\/code> szimmetrikusak, \u00e9s egym\u00e1snak ellent\u00e9tes hat\u00e1sokat gyakorolnak, vagyis: <code>df %&gt;% pivot_longer(spec = spec) %&gt;% pivot_wider(spec = spec)<\/code> \u00e9s <code>df %&gt;% pivot_wider(spec = spec) %&gt;% pivot_longer(spec = spec)<\/code> visszaadja az eredeti df-t.<\/p>\n<p><\/p>\n<h3 id=\"prosteyshiy-primer-privedeniya-tablicy-k-shirokomu-formatu\">Egyszer\u0171 p\u00e9lda egy t\u00e1bl\u00e1zat sz\u00e9les form\u00e1tumba val\u00f3 \u00e1talak\u00edt\u00e1s\u00e1ra<\/h3>\n<p><\/p>\n<p>A funkci\u00f3 m\u0171k\u00f6d\u00e9s\u00e9nek bemutat\u00e1s\u00e1hoz <code>pivot_wider()<\/code> az al\u00e1bbi adathalmazon fogunk dolgozni <em>fish_encounters<\/em>, amely egy olyan inform\u00e1ci\u00f3t t\u00e1rol, hogy k\u00fcl\u00f6nb\u00f6z\u0151 \u00e1llom\u00e1sok hogyan r\u00f6gz\u00edtik a halak mozg\u00e1s\u00e1t a foly\u00f3ban.<\/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>T\u00f6bbnyire ez a t\u00e1bl\u00e1zat informat\u00edvabb \u00e9s haszn\u00e1lhat\u00f3bb lesz, ha az inform\u00e1ci\u00f3t minden \u00e1llom\u00e1sra k\u00fcl\u00f6n oszlopban mutatjuk be.<\/p>\n<p><\/p>\n<p><code>fish_encounters %&gt;% pivot_wider(names_from = station, values_from = seen)<\/code><\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">fish_encounters %&gt;% pivot_wider(names_from = station, values_from = seen)\n#&gt; # A tibble: 19 x 12\n#&gt;    fish  Release I80_1 Lisbon  Rstr Base_TD   BCE   BCW  BCE2  BCW2   MAE\n#&gt;        &amp;              \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 9 tov\u00e1bbi sorral, \u00e9s 1 tov\u00e1bbi v\u00e1ltoz\u00f3: MAW<\/code><\/pre>\n<p><\/p>\n<p>Ez az adathalmoz csak akkor r\u00f6gz\u00edti az inform\u00e1ci\u00f3t, amikor a halat az \u00e1llom\u00e1s \u00e9szlelte, vagyis ha b\u00e1rmilyen hal nem volt r\u00f6gz\u00edtve ak\u00e1rmelyik \u00e1llom\u00e1s \u00e1ltal, akkor ezek az adatok nem lesznek a t\u00e1bl\u00e1zatban. Ez azt jelenti, hogy a kimeneti adatok NA \u00e9rt\u00e9kekkel lesznek kit\u00f6ltve. <\/p>\n<p><\/p>\n<p>Mindazon\u00e1ltal ebben az esetben tudjuk, hogy a r\u00f6gz\u00edt\u00e9s hi\u00e1nya azt jelenti, hogy a hal nem volt \u00e9szlelve, ez\u00e9rt haszn\u00e1lhatjuk az argumentumot <em>values_fill<\/em> a funkci\u00f3ban <code>pivot_wider()<\/code> \u00e9s a hi\u00e1nyz\u00f3 \u00e9rt\u00e9keket null\u00e1kra kit\u00f6lteni:<\/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\">Oszlopn\u00e9v gener\u00e1l\u00e1sa t\u00f6bb forr\u00e1sv\u00e1ltoz\u00f3b\u00f3l<\/h3>\n<p><\/p>\n<p>K\u00e9pzelj\u00fck el, hogy van egy t\u00e1bl\u00e1zatunk, amely a term\u00e9k, az orsz\u00e1g \u00e9s az \u00e9v kombin\u00e1ci\u00f3j\u00e1t tartalmazza. A teszt adatkeret gener\u00e1l\u00e1s\u00e1hoz a k\u00f6vetkez\u0151 k\u00f3dot futtathatjuk:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">df %\n  filter((term\u00e9k == \"A\" &amp; orsz\u00e1g == \"AI\") | term\u00e9k == \"B\") %&gt;% \n  mutate(\u00e9rt\u00e9k = 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>A feladatunk az, hogy kiterjessz\u00fck az adatkeretet \u00fagy, hogy egy oszlop tartalmazza az \u00f6sszes term\u00e9k \u00e9s orsz\u00e1g kombin\u00e1ci\u00f3 adatait. Ehhez elegend\u0151 \u00e1tadni az <em>names_from<\/em> vektort, amely az egyes\u00edtett mez\u0151k neveit tartalmazza.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">df %&gt;% pivot_wider(names_from = c(term\u00e9k, orsz\u00e1g),\n                 values_from = \"\u00e9rt\u00e9k\")<\/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>A funkci\u00f3ra specifik\u00e1ci\u00f3kat is alkalmazhat: <code>pivot_wider()<\/code>. De a megad\u00e1skor <code>pivot_wider()<\/code> a specifik\u00e1ci\u00f3 olyan \u00e1talak\u00edt\u00e1st hajt v\u00e9gre, amely ellent\u00e9tes <code>pivot_longer()<\/code>: oszlopokat hoz l\u00e9tre, amelyek a <em>.n\u00e9v<\/em>sz\u00e1mos mez\u0151b\u0151l \u00e9s az <em>.value<\/em> m\u00e1s oszlopokb\u00f3l sz\u00e1rmazik.<\/p>\n<p><\/p>\n<p>Ehhez az adathalmazhoz testreszabott specifik\u00e1ci\u00f3t gener\u00e1lhat, ha azt szeretn\u00e9, hogy minden lehets\u00e9ges orsz\u00e1g \u00e9s term\u00e9k kombin\u00e1ci\u00f3 saj\u00e1t oszlopa legyen, nem pedig csak azok, amelyek az adatokban szerepelnek:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">spec % \n  expand(term\u00e9k, orsz\u00e1g, .value = \"\u00e9rt\u00e9k\") %&gt;% \n  unite(\".name\", term\u00e9k, orsz\u00e1g, 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\">T\u00f6bb halad\u00f3 p\u00e9lda az \u00faj tidyr koncepci\u00f3 m\u0171k\u00f6d\u00e9s\u00e9re<\/h2>\n<p><\/p>\n<h3 id=\"privedenie-dannyh-k-akkuratnomu-vidu-na-primere-nabora-dannyh-o-perepisi-dohoda-i-arendnoy-platy-v-ssha\">Adatok rendezett megjelen\u00e9se az Egyes\u00fclt \u00c1llamok j\u00f6vedelmi \u00e9s b\u00e9rleti adatainak n\u00e9psz\u00e1ml\u00e1l\u00e1sa alapj\u00e1n<\/h3>\n<p><\/p>\n<p>Az adathalmaz <em>us_rent_income<\/em> inform\u00e1ci\u00f3t tartalmaz az \u00e1tlagos j\u00f6vedelemr\u0151l \u00e9s a b\u00e9rleti d\u00edjr\u00f3l az Egyes\u00fclt \u00c1llamok minden \u00e1llam\u00e1ban 2017-re vonatkoz\u00f3an (az adathalmaz el\u00e9rhet\u0151 a <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 tov\u00e1bbi 94 sor<\/code><\/pre>\n<p><\/p>\n<p>A form\u00e1tumban, ahogyan az adatok t\u00e1rolva vannak az adatkeretben <em>us_rent_income<\/em> nagyon k\u00e9nyelmetlen vel\u00fck dolgozni, ez\u00e9rt szeretn\u00e9nk l\u00e9trehozni egy adathalmazt az al\u00e1bbi oszlopokkal: <em>rent<\/em>, <em>rent_moe<\/em>, <em>come<\/em>, <em>income_moe<\/em>. Sz\u00e1mos m\u00f3dja van ennek a specifik\u00e1ci\u00f3nak a l\u00e9trehoz\u00e1s\u00e1ra, de a l\u00e9nyeg az, hogy meg kell gener\u00e1lni minden v\u00e1ltoz\u00f3 \u00e9s a <em>estimate\/moe<\/em>, majd l\u00e9trehozni a oszlop nev\u00e9t.<\/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>A specifik\u00e1ci\u00f3 megad\u00e1sa <code>pivot_wider()<\/code> az eredm\u00e9nyt ad, amit keres\u00fcnk:<\/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\">Vil\u00e1gbank<\/h3>\n<p><\/p>\n<p>N\u00e9ha az adathalmaz megfelel\u0151 form\u00e1ba hoz\u00e1sa t\u00f6bb l\u00e9p\u00e9st ig\u00e9nyel.<br \/>\nAdathalmaz <em>world_bank_pop<\/em> tartalmazza a vil\u00e1gbank adatait minden orsz\u00e1g n\u00e9pess\u00e9g\u00e9r\u0151l 2000 \u00e9s 2018 k\u00f6z\u00f6tt.<\/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>C\u00e9lunk egy rendezett adathalmaz l\u00e9trehoz\u00e1sa, ahol minden v\u00e1ltoz\u00f3 k\u00fcl\u00f6n oszlopban tal\u00e1lhat\u00f3. Jelenleg nem vil\u00e1gos, hogy pontosan milyen l\u00e9p\u00e9sek sz\u00fcks\u00e9gesek, de a legnyilv\u00e1nval\u00f3bb probl\u00e9m\u00e1val kezdj\u00fck: az \u00e9v t\u00f6bb oszlopra van osztva.<\/p>\n<p><\/p>\n<p>Ehhez a hiba jav\u00edt\u00e1s\u00e1hoz az al\u00e1bbi f\u00fcggv\u00e9nyt kell haszn\u00e1lni. <code>pivot_longer()<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">pop2 % \n  pivot_longer(`2000`:`2017`, names_to = \"\u00e9v\")<\/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>A k\u00f6vetkez\u0151 l\u00e9p\u00e9s az indicator v\u00e1ltoz\u00f3 megvizsg\u00e1l\u00e1sa.<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>Ahol SP.POP.GROW \u2013 n\u00e9pess\u00e9gn\u00f6veked\u00e9s, SP.POP.TOTL \u2013 teljes n\u00e9pess\u00e9g, SP.URB. * pedig ugyanaz, de csak a v\u00e1rosi ter\u00fcletekre vonatkozik. Osszuk el ezeket az \u00e9rt\u00e9keket k\u00e9t v\u00e1ltoz\u00f3ra: area \u2013 ter\u00fclet (total vagy urban) \u00e9s a t\u00e9nyleges adatokat tartalmaz\u00f3 v\u00e1ltoz\u00f3ra (population vagy growth):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">pop3 % \n  separate(indicator, c(NA, \"ter\u00fclet\", \"v\u00e1ltoz\u00f3\") )<\/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>Most m\u00e1r csak a variable v\u00e1ltoz\u00f3t kell k\u00e9t oszlopra osztanunk:<\/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\">Kapcsolatok list\u00e1ja<\/h3>\n<p><\/p>\n<p>Az utols\u00f3 p\u00e9lda, k\u00e9pzelje el, hogy van egy kontaklista, amit egy weboldalr\u00f3l m\u00e1solt be:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">contacts &lt;- tribble(\n  ~mez\u0151, ~\u00e9rt\u00e9k,\n  &quot;n\u00e9v&quot;, &quot;Jiena McLellan&quot;,\n  &quot;c\u00e9g&quot;, &quot;Toyota&quot;, \n  &quot;n\u00e9v&quot;, &quot;John Smith&quot;, \n  &quot;c\u00e9g&quot;, &quot;google&quot;, \n  &quot;email&quot;, &quot;john@google.com&quot;,\n  &quot;n\u00e9v&quot;, &quot;Huxley Ratcliffe&quot;\n)<\/code><\/pre>\n<p><\/p>\n<p>Ennek a list\u00e1nak t\u00e1bl\u00e1zatos form\u00e1ba hoz\u00e1sa meglehet\u0151sen neh\u00e9z, mert nincs olyan v\u00e1ltoz\u00f3, amely azonos\u00edtan\u00e1, hogy mely adatok tartoznak melyik kapcsolathoz. Ezt orvosolhatjuk azzal, hogy \u00e9szrevessz\u00fck, hogy minden \u00faj kapcsolat adatainak kezdete a n\u00e9vvel kezd\u0151dik (\"name\"), \u00edgy l\u00e9trehozhatunk egy egyedi azonos\u00edt\u00f3t, amelyet minden alkalommal n\u00f6vel\u00fcnk, amikor a field oszlopban a \"name\" \u00e9rt\u00e9ket tal\u00e1lunk:<\/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>Most, hogy van egyedi azonos\u00edt\u00f3nk minden kontaktra, megford\u00edthatjuk a field \u00e9s value mez\u0151ket oszlopokk\u00e1:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">contacts %&gt;% \n  pivot_wider(names_from = field, values_from = value)<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">#&gt; # A tibble: 3 x 4\n#&gt;   person_id name             company email          \n#&gt;       &lt;int&gt; &lt;chr&gt;            &lt;chr&gt;   &lt;chr&gt;          \n#&gt; 1         1 Jiena McLellan   Toyota  &lt;NA&gt;           \n#&gt; 2         2 John Smith       google  john@google.com\n#&gt; 3         3 Huxley Ratcliffe &lt;NA&gt;    &lt;NA&gt;<\/code><\/pre>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Z\u00e1r\u00e1s<\/h2>\n<p><\/p>\n<p>Szem\u00e9ly szerint v\u00e9lem\u00e9nyem szerint az \u00faj koncepci\u00f3 <strong>tidyr<\/strong> val\u00f3ban intuit\u00edvabb, \u00e9s jelent\u0151sen meghaladja a r\u00e9gi funkci\u00f3k teljes\u00edtm\u00e9ny\u00e9t. <code>spread()<\/code> \u00e9s <code>gather()<\/code>Rem\u00e9lem, ez a cikk seg\u00edtett az \u00d6n sz\u00e1m\u00e1ra a meg\u00e9rt\u00e9sben. <code>pivot_longer()<\/code> \u00e9s <code>pivot_wider()<\/code>.<\/p>\n<p>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/r-paket-tidyr-i-ego-novye-funkczii-pivot_longer-i-pivot_wider\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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 csomag: tidyr \u00e9s \u00faj funkci\u00f3i, a pivot_longer \u00e9s pivot_wider | ProHoster","description":"A tidyr csomag a R nyelv legn\u00e9pszer\u0171bb k\u00f6nyvt\u00e1r\u00e1nak, a tidyverse-nek a sz\u00edv\u00e9ben helyezkedik el. A csomag f\u0151 feladata az adatok rendbe hoz\u00e1sa. A Habr-on.","canonical_url":"https:\/\/prohoster.info\/hu\/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":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/76291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=76291"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/76291\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/76292"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=76291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=76291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=76291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}