{"id":3458,"date":"2017-07-20T14:42:15","date_gmt":"2017-07-20T13:42:15","guid":{"rendered":"https:\/\/abcdr.guyader.pro\/?p=3458"},"modified":"2018-04-08T00:03:00","modified_gmt":"2018-04-07T23:03:00","slug":"rbind-et-cbind-dans-le-tidyverse","status":"publish","type":"post","link":"https:\/\/thinkr.fr\/abcdr\/rbind-et-cbind-dans-le-tidyverse\/","title":{"rendered":"Comment faire rbind et cbind dans le tidyverse ? bind_rows et bind_cols"},"content":{"rendered":"<p>Plus de robustesse, plus de s\u00e9curit\u00e9, nous avons nomm\u00e9 <code>bind_rows<\/code> et <code>bind_cols<\/code> !<\/p>\n<p>Package du tidyverse, <strong>{dplyr} regorge d&rsquo;outils ultra efficaces pour la manipulation de donn\u00e9es<\/strong>. Parmi eux, deux petites fonctions qui, \u00e0 premi\u00e8re vue, ne payent pas de mine&#8230; et pourtant. <code>bind_rows<\/code> et <code>bind_cols<\/code> vous permettent d&rsquo;effectuer l&rsquo;\u00e9quivalent de <code>rbind<\/code> et <code>cbind<\/code> mais sont plus fonctionnelles, et affichent des r\u00e9sultats plus propres et exploitables.<\/p>\n<p>Commen\u00e7ons par cr\u00e9er deux tableaux. Si nous tentons de les juxtaposer avec la fonction de base <code>rbind<\/code>, nous aurons une erreur. \u00c0 l&rsquo;inverse, <code>bind_rows<\/code> fera le job, en peuplant les \u00ab\u00a0colonnes manquantes\u00a0\u00bb par des NA.<\/p>\n<pre><code>\n  library(dplyr)\n  df1 &lt;- data.frame(a = LETTERS,\n                    b = LETTERS)\n  df2 &lt;- data.frame(c = LETTERS,\n                    d = LETTERS)\n  bind(df1, df2)\n    Error in match.names(clabs, names(xi)) :\n      les noms ne correspondent pas aux noms pr\u00e9c\u00e9dents\n  bind_rows(df1, df2)\n<\/code><\/pre>\n<\/p>\n<p>Au tour de <code>bind_cols<\/code>. Pas de soucis dans nos deux exemples du dessus, en base ou avec la fonction de {dplyr}. Testons avec deux nouveaux tableaux.<\/p>\n<pre><code>\n  df3 &lt;- data.frame(a = LETTERS[1:2],\n                    b = LETTERS[1:2])\n  df4 &lt;- data.frame(a = LETTERS[1:2],\n                    b = LETTERS[1:2])\n  cbind(df3, df4)\n    a b a b\n  1 A A A A\n  2 B B B B\n  bind_cols(df3, df4)\n    a b a1 b1\n  1 A A  A  A\n  2 B B  B  B\n<\/code><\/pre>\n<p>Le r\u00e9el plus de <code>bind_cols<\/code> ici ? La gestion des noms de colonne : alors que la fonction de {base} duplique les noms, la fonction de {dplyr} ajoute un chiffre, afin d&rsquo;\u00e9viter le souci des colonnes dupliqu\u00e9es, qui pourront plus tard mettre en p\u00e9ril une analyse.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Plus de robustesse, plus de s\u00e9curit\u00e9, nous avons nomm\u00e9 bind_rows et bind_cols ! Package du tidyverse, {dplyr} regorge d&rsquo;outils ultra efficaces pour la manipulation de donn\u00e9es. Parmi eux, deux petites fonctions qui, \u00e0 premi\u00e8re vue, ne payent pas de mine&#8230; et pourtant. bind_rows et bind_cols vous permettent d&rsquo;effectuer l&rsquo;\u00e9quivalent de rbind et cbind mais sont plus fonctionnelles, et affichent des r\u00e9sultats plus propres et exploitables. Commen\u00e7ons par cr\u00e9er deux tableaux. Si nous tentons de les juxtaposer avec la fonction de base rbind, nous aurons une erreur. \u00c0 l&rsquo;inverse, bind_rows fera le job, en peuplant les \u00ab\u00a0colonnes manquantes\u00a0\u00bb par des NA. library(dplyr) df1 &lt;- data.frame(a =<a class=\"more-link\" href=\"https:\/\/thinkr.fr\/abcdr\/rbind-et-cbind-dans-le-tidyverse\/\">Read More &rarr;<\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","rop_custom_images_group":[],"rop_custom_messages_group":[],"rop_publish_now":"initial","rop_publish_now_accounts":{"twitter_399453572_399453572":""},"rop_publish_now_history":[],"rop_publish_now_status":"pending","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[12,22],"tags":[],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-colin","4":"post-3458","6":"format-standard","7":"category-manipulation-de-donnees","8":"category-tidyverse"},"acf":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p9O7Sx-TM","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts\/3458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/comments?post=3458"}],"version-history":[{"count":2,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts\/3458\/revisions"}],"predecessor-version":[{"id":4336,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts\/3458\/revisions\/4336"}],"wp:attachment":[{"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/media?parent=3458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/categories?post=3458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/tags?post=3458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}