{"id":332,"date":"2013-12-17T16:22:11","date_gmt":"2013-12-17T21:22:11","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/nemo\/?p=332"},"modified":"2013-12-17T16:57:10","modified_gmt":"2013-12-17T21:57:10","slug":"unir-datos-repaso-de-merge-join-cbind-rbind-con-objetos-tipo-data-table-en-r","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/nemo\/2013\/12\/17\/unir-datos-repaso-de-merge-join-cbind-rbind-con-objetos-tipo-data-table-en-r\/","title":{"rendered":"Unir datos - un repaso de las diferencias entre merge, inner join, left join, right join, full join, cbind y rbind cuando se usa objetos tipo data.table en R"},"content":{"rendered":"<div style=\"overflow: auto\">\n<p class=\"geshifilter\">Esta semana alguien me pregunt\u00f3 como realizar unos joins utilizando objetos tipo <a title=\"data.table package on cran\" href=\"http:\/\/cran.r-project.org\/web\/packages\/data.table\/index.html\" target=\"_blank\">data.table<\/a>, esta persona dudaba si lo correcto era usar merge, rbind o cbind as\u00ed que hago esta entrada al blog\u00a0aprovechando el script que se us\u00f3 para explicarle las diferencias.<\/p>\n<p><span style=\"font-size: 12px;line-height: 18px\">Cuando queremos \"unir\" dos conjuntos de datos en general se puede hacer lo siguiente:<\/span><\/p>\n<ul>\n<li><strong>Agregar Filas:<\/strong> Aumentar las filas de un conjunto de datos debajo del otro.<\/li>\n<li><strong>Agregar Columnas:<\/strong> Aumentar las columnas de un conjunto de datos a lado del otro.<\/li>\n<li><strong>Join, buscarv o vlookup:<\/strong> En este caso se tienen unas columnas o variables que hacen las veces de \"key\" o \"id\" y al primer conjunto se le agrega el contenido del segundo conjunto de datos si el \"key\" o \"id\" del segundo conjunto corresponde con el\u00a0\"key\" o \"id\" del primer conjunto de datos. Buscarv y Vlookup son t\u00e9rminos los usuarios de excel, estos son un caso particular de \"Join\" que es el t\u00e9rmino que conocemos quienes \"picamos c\u00f3digo\" en R. Hay diversos tipos de Join, en resumen:\n<ul>\n<li><span style=\"text-decoration: underline\">Inner Join:<\/span> Devuelve\u00a0s\u00f3lo los datos de los id que se repiten en ambos conjuntos de datos.<\/li>\n<li><span style=\"text-decoration: underline\">Left Join:<\/span> Devuelve todo el conjunto de dato de la tabla de la izquierda mientras que de la tabla derecha s\u00f3lo se devuelve los datos de los id\u00a0que coinciden con el primer conjunto de datos\u00a0(esto es como el buscarv o vlookup de excel).<\/li>\n<li><span style=\"text-decoration: underline\">Right Join:<\/span>\u00a0Devuelve\u00a0todo el conjunto de dato de la tabla de la derecha mientras que de la tabla izquierda s\u00f3lo se devuelve los datos de los id\u00a0que coinciden con el segundo conjunto de datos.<\/li>\n<li><span style=\"text-decoration: underline\">Full Join:<\/span> Devolver todas los datos\u00a0sin importar si hay coincidencia o no entre los ids de ambos conjuntos de datos.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"geshifilter\">El paquete data.table es una excelente opci\u00f3n para realizar tareas m\u00e1s eficientemente en R, pero para aprender a usarlo se requiere un poco de lectura y paciencia, pueden revisar su\u00a0<a title=\"Introducci\u00f3n a data-table\" href=\"http:\/\/cran.r-project.org\/web\/packages\/data.table\/vignettes\/datatable-intro.pdf\" target=\"_blank\">vignettes que es una buena introducci\u00f3n.<\/a><\/p>\n<p><span style=\"font-size: 12px;line-height: 18px\">Para realizar Joins se puede usar la sintaxis Dt[X] del paquete data.table<\/span><span style=\"font-size: 12px;line-height: 18px\">\u00a0o usar el comando merge como si se tratase con objetos de tipo data.frame.\u00a0<\/span><span style=\"font-size: 12px;line-height: 18px\">\u00a0Dt[X] es m\u00e1s eficiente que merge, por contraparte merge es m\u00e1s intuitivo (al menos para el usuario promedio de R). Para entender un poco\u00a0Dt[X] se debe resaltar que al escribir Dt[X] el software va a buscar los elementos del objeto Dt bas\u00e1ndose en las variables \"key\" o \"id\" de X, es decir, se toma como base al objeto X.<\/span><\/p>\n<p><span style=\"font-size: 12px;line-height: 18px\">En el siguiente script se muestra como realizar Inner Join, Left Join (Buscarv), Right Join, Full Join, agregar columnas y filas utilizando 3 objetos de tipo data.table (n\u00f3tese que los output inician con ###, como cuandos se usa knitr)<\/span><\/p>\n<div style=\"overflow: auto\">\n<div class=\"geshifilter\">\n<pre class=\"r geshifilter-R\" style=\"font-family: monospace\"><span style=\"color: #666666;font-style: italic\"># Cargar el paquete<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/library\"><span style=\"color: #003399;font-weight: bold\">library<\/span><\/a><span style=\"color: #009900\">(<\/span><a href=\"http:\/\/inside-r.org\/packages\/cran\/data.table\"><span>data.table<\/span><\/a><span style=\"color: #009900\">)<\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># Se crea 3 data.frames con dos columnas 'id' de nombre id\u00e9ntico pero con<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># columnas diferentes entre ellos y adem\u00e1s en los 'id' de cada uno de<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># ellos van a haber elementos coincidentes y diferentes<\/span>\r\ndf1 <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/data.frame\"><span style=\"color: #003399;font-weight: bold\">data.frame<\/span><\/a><span style=\"color: #009900\">(<\/span>id1 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #cc66cc\">11<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">12<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">13<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">14<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">,<\/span> id2 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #cc66cc\">21<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">22<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">23<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">24<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">,<\/span> c11 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #cc66cc\">1<\/span><span style=\"color: #339933\">,<\/span> \r\n    <span style=\"color: #cc66cc\">2<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">3<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">4<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">,<\/span> c12 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #0000ff\">\"a\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"b\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"c\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"d\"<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\ndf2 <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/data.frame\"><span style=\"color: #003399;font-weight: bold\">data.frame<\/span><\/a><span style=\"color: #009900\">(<\/span>id1 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #cc66cc\">99<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">12<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">13<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">14<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">,<\/span> id2 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #cc66cc\">98<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">22<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">23<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">24<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">,<\/span> c21 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #cc66cc\">5<\/span><span style=\"color: #339933\">,<\/span> \r\n    <span style=\"color: #cc66cc\">6<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">7<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">8<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">,<\/span> c22 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #0000ff\">\"e\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"f\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"g\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"h\"<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\ndf3 <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/data.frame\"><span style=\"color: #003399;font-weight: bold\">data.frame<\/span><\/a><span style=\"color: #009900\">(<\/span>id1 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #cc66cc\">999<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">9999<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">13<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">14<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">,<\/span> id2 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #cc66cc\">998<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">9998<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">23<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">24<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">,<\/span> c31 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #cc66cc\">9<\/span><span style=\"color: #339933\">,<\/span> \r\n    <span style=\"color: #cc66cc\">10<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">11<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #cc66cc\">12<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #339933\">,<\/span> c32 = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #0000ff\">\"i\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"j\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"k\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"l\"<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># Mostrar los 3 data.frames<\/span>\r\ndf1\r\n<span style=\"color: #666666;font-style: italic\">##   id1 id2 c11 c12<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1  11  21   1   a<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2  12  22   2   b<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3  13  23   3   c<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4  14  24   4   d<\/span>\r\ndf2\r\n<span style=\"color: #666666;font-style: italic\">##   id1 id2 c21 c22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1  99  98   5   e<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2  12  22   6   f<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3  13  23   7   g<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4  14  24   8   h<\/span>\r\ndf3\r\n<span style=\"color: #666666;font-style: italic\">##    id1  id2 c31 c32<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1  999  998   9   i<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2 9999 9998  10   j<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3   13   23  11   k<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4   14   24  12   l<\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># Transformar los data.frame a data.table indicando que la 'key' son las<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># columnas id1 e id2<\/span>\r\nDt1 <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/packages\/cran\/data.table\"><span>data.table<\/span><\/a><span style=\"color: #009900\">(<\/span>df1<span style=\"color: #339933\">,<\/span> key = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #0000ff\">\"id1\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"id2\"<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\nDt2 <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/packages\/cran\/data.table\"><span>data.table<\/span><\/a><span style=\"color: #009900\">(<\/span>df2<span style=\"color: #339933\">,<\/span> key = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #0000ff\">\"id1\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"id2\"<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\nDt3 <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/packages\/cran\/data.table\"><span>data.table<\/span><\/a><span style=\"color: #009900\">(<\/span>df3<span style=\"color: #339933\">,<\/span> key = <a href=\"http:\/\/inside-r.org\/r-doc\/base\/c\"><span style=\"color: #003399;font-weight: bold\">c<\/span><\/a><span style=\"color: #009900\">(<\/span><span style=\"color: #0000ff\">\"id1\"<\/span><span style=\"color: #339933\">,<\/span> <span style=\"color: #0000ff\">\"id2\"<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># *** PARA HACER INNER JOIN *** <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># En el Inner Join se pretende devolver s\u00f3lo los id <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># que se repiten en ambos conjuntos de datos <\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># Inner join ente Dt1 y Dt2 con comando de data.table<\/span>\r\nDt1<span style=\"color: #009900\">[<\/span>Dt2<span style=\"color: #339933\">,<\/span> nomatch = <span style=\"color: #cc66cc\">0<\/span><span style=\"color: #009900\">]<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 c21 c22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  12  22   2   b   6   f<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  13  23   3   c   7   g<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  14  24   4   d   8   h<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Inner join ente Dt1 y Dt2, usando merge<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/merge\"><span style=\"color: #003399;font-weight: bold\">merge<\/span><\/a><span style=\"color: #009900\">(<\/span>x = Dt1<span style=\"color: #339933\">,<\/span> y = Dt2<span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 c21 c22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  12  22   2   b   6   f<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  13  23   3   c   7   g<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  14  24   4   d   8   h<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Inner join ente Dt1, Dt2 y Dt3 con comando de data.table<\/span>\r\nDt1<span style=\"color: #009900\">[<\/span>Dt2<span style=\"color: #009900\">[<\/span>Dt3<span style=\"color: #339933\">,<\/span> nomatch = <span style=\"color: #cc66cc\">0<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #339933\">,<\/span> nomatch = <span style=\"color: #cc66cc\">0<\/span><span style=\"color: #009900\">]<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 c21 c22 c31 c32<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  13  23   3   c   7   g  11   k<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  14  24   4   d   8   h  12   l<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Inner join usando Reduce y merge<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/Reduce\"><span style=\"color: #003399;font-weight: bold\">Reduce<\/span><\/a><span style=\"color: #009900\">(<\/span><a href=\"http:\/\/inside-r.org\/r-doc\/base\/merge\"><span style=\"color: #003399;font-weight: bold\">merge<\/span><\/a><span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/list\"><span style=\"color: #003399;font-weight: bold\">list<\/span><\/a><span style=\"color: #009900\">(<\/span>Dt1<span style=\"color: #339933\">,<\/span> Dt2<span style=\"color: #339933\">,<\/span> Dt3<span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 c21 c22 c31 c32<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  13  23   3   c   7   g  11   k<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  14  24   4   d   8   h  12   l<\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># *** PARA HACER RIGHT JOIN *** <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># En el Right Join se pretende devolver todos los id <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># de la tabla de la derecha, y s\u00f3lo los id con match <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># de la tabla izquierda <\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># Right join ente Dt1 y Dt2 con comando de data.table<\/span>\r\nDt1<span style=\"color: #009900\">[<\/span>Dt2<span style=\"color: #339933\">,<\/span> nomatch = <span style=\"color: #000000;font-weight: bold\">NA<\/span><span style=\"color: #009900\">]<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 c21 c22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  12  22   2   b   6   f<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  13  23   3   c   7   g<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  14  24   4   d   8   h<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  99  98  NA  NA   5   e<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Right join ente Dt1 y Dt2, usando merge<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/merge\"><span style=\"color: #003399;font-weight: bold\">merge<\/span><\/a><span style=\"color: #009900\">(<\/span>x = Dt1<span style=\"color: #339933\">,<\/span> y = Dt2<span style=\"color: #339933\">,<\/span> all.y = <span style=\"color: #000000;font-weight: bold\">TRUE<\/span><span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 c21 c22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  12  22   2   b   6   f<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  13  23   3   c   7   g<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  14  24   4   d   8   h<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  99  98  NA  NA   5   e<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Right join ente Dt1, Dt2 y Dt3 con comando de data.table<\/span>\r\nDt1<span style=\"color: #009900\">[<\/span>Dt2<span style=\"color: #009900\">[<\/span>Dt3<span style=\"color: #339933\">,<\/span> nomatch = <span style=\"color: #000000;font-weight: bold\">NA<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #339933\">,<\/span> nomatch = <span style=\"color: #000000;font-weight: bold\">NA<\/span><span style=\"color: #009900\">]<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##     id1  id2 c11 c12 c21 c22 c31 c32<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:   13   23   3   c   7   g  11   k<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:   14   24   4   d   8   h  12   l<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  999  998  NA  NA  NA  NA   9   i<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4: 9999 9998  NA  NA  NA  NA  10   j<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Para hacer un Right join entre varios data.table se va a crear la<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># funcion mergeRight que no es mas que el merge normal con el<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># par\u00e1metro all.y= TRUE, esto forzar\u00e1 a mostrar todos los datos del<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># segundo conjunto y s\u00f3lo los datos con match del primer conjunto<\/span>\r\nmergeRight <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/function\"><span style=\"color: #003399;font-weight: bold\">function<\/span><\/a><span style=\"color: #009900\">(<\/span>x<span style=\"color: #339933\">,<\/span> y<span style=\"color: #009900\">)<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/merge\"><span style=\"color: #003399;font-weight: bold\">merge<\/span><\/a><span style=\"color: #009900\">(<\/span>x<span style=\"color: #339933\">,<\/span> y<span style=\"color: #339933\">,<\/span> all.y = <span style=\"color: #000000;font-weight: bold\">TRUE<\/span><span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Usando Reduce y mergeRight para hacer un Right join entre Dt1 y Dt2 <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># se puede ver como se aumentan NAs donde no hay match<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/Reduce\"><span style=\"color: #003399;font-weight: bold\">Reduce<\/span><\/a><span style=\"color: #009900\">(<\/span>mergeRight<span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/list\"><span style=\"color: #003399;font-weight: bold\">list<\/span><\/a><span style=\"color: #009900\">(<\/span>Dt1<span style=\"color: #339933\">,<\/span> Dt2<span style=\"color: #339933\">,<\/span> Dt3<span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##     id1  id2 c11 c12 c21 c22 c31 c32<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:   13   23   3   c   7   g  11   k<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:   14   24   4   d   8   h  12   l<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  999  998  NA  NA  NA  NA   9   i<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4: 9999 9998  NA  NA  NA  NA  10   j<\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># *** PARA HACER LEFT JOIN *** <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># En el Left Join se pretende devolver todos los id de <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># la tabla de la izquierda, y s\u00f3lo los id con match de <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># la tabla derecha <\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># Left join ente Dt1 y Dt2 con comando de data.table <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Para hacer un Left join en data.table simplemente se hace <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># un righ Join cambiando el orden de los data.table. <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Se puede ver que el \u00fanico problema con este m\u00e9todo <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># es el orden de las columnas pues se muestra primero <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># las columnas del Dt2<\/span>\r\nDt2<span style=\"color: #009900\">[<\/span>Dt1<span style=\"color: #339933\">,<\/span> nomatch = <span style=\"color: #000000;font-weight: bold\">NA<\/span><span style=\"color: #009900\">]<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c21 c22 c11 c12<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  11  21  NA  NA   1   a<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  12  22   6   f   2   b<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  13  23   7   g   3   c<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  14  24   8   h   4   d<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Left join ente Dt1 y Dt2, usando merge<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/merge\"><span style=\"color: #003399;font-weight: bold\">merge<\/span><\/a><span style=\"color: #009900\">(<\/span>x = Dt1<span style=\"color: #339933\">,<\/span> y = Dt2<span style=\"color: #339933\">,<\/span> all.x = <span style=\"color: #000000;font-weight: bold\">TRUE<\/span><span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 c21 c22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  11  21   1   a  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  12  22   2   b   6   f<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  13  23   3   c   7   g<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  14  24   4   d   8   h<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Left join ente Dt1, Dt2 y Dt3 con comando de data.table idem: notar el<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># orden de las columnas<\/span>\r\nDt3<span style=\"color: #009900\">[<\/span>Dt2<span style=\"color: #009900\">[<\/span>Dt1<span style=\"color: #339933\">,<\/span> nomatch = <span style=\"color: #000000;font-weight: bold\">NA<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #339933\">,<\/span> nomatch = <span style=\"color: #000000;font-weight: bold\">NA<\/span><span style=\"color: #009900\">]<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c31 c32 c21 c22 c11 c12<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  11  21  NA  NA  NA  NA   1   a<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  12  22  NA  NA   6   f   2   b<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  13  23  11   k   7   g   3   c<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  14  24  12   l   8   h   4   d<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Para hacer un Left join entre varios data.table se va a crear la<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># funcion mergeLeft que no es mas que el merge normal con el<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># par\u00e1metro all.x= TRUE, esto forzar\u00e1 a mostrar todos los datos del<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># primer conjunto y s\u00f3lo los datos con match del segundo conjunto<\/span>\r\nmergeLeft <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/function\"><span style=\"color: #003399;font-weight: bold\">function<\/span><\/a><span style=\"color: #009900\">(<\/span>x<span style=\"color: #339933\">,<\/span> y<span style=\"color: #009900\">)<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/merge\"><span style=\"color: #003399;font-weight: bold\">merge<\/span><\/a><span style=\"color: #009900\">(<\/span>x<span style=\"color: #339933\">,<\/span> y<span style=\"color: #339933\">,<\/span> all.x = <span style=\"color: #000000;font-weight: bold\">TRUE<\/span><span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Usando Reduce y mergeLeft para hacer un Full join entre Dt1, Dt2 y Dt3<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># se puede ver como se aumentan NAs donde no hay match<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/Reduce\"><span style=\"color: #003399;font-weight: bold\">Reduce<\/span><\/a><span style=\"color: #009900\">(<\/span>mergeLeft<span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/list\"><span style=\"color: #003399;font-weight: bold\">list<\/span><\/a><span style=\"color: #009900\">(<\/span>Dt1<span style=\"color: #339933\">,<\/span> Dt2<span style=\"color: #339933\">,<\/span> Dt3<span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 c21 c22 c31 c32<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  11  21   1   a  NA  NA  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  12  22   2   b   6   f  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  13  23   3   c   7   g  11   k<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  14  24   4   d   8   h  12   l<\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># *** PARA HACER FULL JOIN *** <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># En el Full Join se pretende devolver todos los id de las <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># tablas sin importar si hay match o no <\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># Full join ente Dt1 y Dt2 con comando de data.table <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Para hacer un Full join en data.table se puede crear un objeto <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># que contenga todos los 'ids' que queremos y utilizar este <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># objeto como el \u00edndice de nusetro join, asi: <\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># Crear una variable con la uni\u00f3n de los 'id' de las data.table<\/span>\r\nids <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/unique\"><span style=\"color: #003399;font-weight: bold\">unique<\/span><\/a><span style=\"color: #009900\">(<\/span><a href=\"http:\/\/inside-r.org\/r-doc\/base\/rbind\"><span style=\"color: #003399;font-weight: bold\">rbind<\/span><\/a><span style=\"color: #009900\">(<\/span>Dt1<span style=\"color: #009900\">[<\/span><span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/list\"><span style=\"color: #003399;font-weight: bold\">list<\/span><\/a><span style=\"color: #009900\">(<\/span>id1<span style=\"color: #339933\">,<\/span> id2<span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #339933\">,<\/span> Dt2<span style=\"color: #009900\">[<\/span><span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/list\"><span style=\"color: #003399;font-weight: bold\">list<\/span><\/a><span style=\"color: #009900\">(<\/span>id1<span style=\"color: #339933\">,<\/span> id2<span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\nids\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  11  21<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  12  22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  13  23<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  14  24<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 5:  99  98<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Full join ente Dt1 y Dt2 con comando de data.table <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># (usando el objeto ids)<\/span>\r\nDt1<span style=\"color: #009900\">[<\/span>Dt2<span style=\"color: #009900\">[<\/span>ids<span style=\"color: #009900\">]<\/span><span style=\"color: #009900\">]<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 c21 c22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  11  21   1   a  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  12  22   2   b   6   f<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  13  23   3   c   7   g<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  14  24   4   d   8   h<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 5:  99  98  NA  NA   5   e<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Full join ente Dt1 y Dt2, usando merge<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/merge\"><span style=\"color: #003399;font-weight: bold\">merge<\/span><\/a><span style=\"color: #009900\">(<\/span>x = Dt1<span style=\"color: #339933\">,<\/span> y = Dt2<span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/all\"><span style=\"color: #003399;font-weight: bold\">all<\/span><\/a> = <span style=\"color: #000000;font-weight: bold\">TRUE<\/span><span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 c21 c22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  11  21   1   a  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  12  22   2   b   6   f<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  13  23   3   c   7   g<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  14  24   4   d   8   h<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 5:  99  98  NA  NA   5   e<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Full join ente Dt1, Dt2 y Dt3 con comando de data.table<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Crear una variable con la uni\u00f3n de los 'id' de las data.table<\/span>\r\nids <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/unique\"><span style=\"color: #003399;font-weight: bold\">unique<\/span><\/a><span style=\"color: #009900\">(<\/span><a href=\"http:\/\/inside-r.org\/r-doc\/base\/rbind\"><span style=\"color: #003399;font-weight: bold\">rbind<\/span><\/a><span style=\"color: #009900\">(<\/span>Dt1<span style=\"color: #009900\">[<\/span><span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/list\"><span style=\"color: #003399;font-weight: bold\">list<\/span><\/a><span style=\"color: #009900\">(<\/span>id1<span style=\"color: #339933\">,<\/span> id2<span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #339933\">,<\/span> Dt2<span style=\"color: #009900\">[<\/span><span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/list\"><span style=\"color: #003399;font-weight: bold\">list<\/span><\/a><span style=\"color: #009900\">(<\/span>id1<span style=\"color: #339933\">,<\/span> id2<span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #339933\">,<\/span> Dt3<span style=\"color: #009900\">[<\/span><span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/list\"><span style=\"color: #003399;font-weight: bold\">list<\/span><\/a><span style=\"color: #009900\">(<\/span>id1<span style=\"color: #339933\">,<\/span> id2<span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\nids\r\n<span style=\"color: #666666;font-style: italic\">##     id1  id2<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:   11   21<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:   12   22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:   13   23<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:   14   24<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 5:   99   98<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 6:  999  998<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 7: 9999 9998<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Full join ente Dt1, Dt2 y Dt3 con comando de data.table <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># (usango el objeto ids)<\/span>\r\nDt1<span style=\"color: #009900\">[<\/span>Dt2<span style=\"color: #009900\">[<\/span>Dt3<span style=\"color: #009900\">[<\/span>ids<span style=\"color: #009900\">]<\/span><span style=\"color: #009900\">]<\/span><span style=\"color: #009900\">]<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##     id1  id2 c11 c12 c21 c22 c31 c32<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:   11   21   1   a  NA  NA  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:   12   22   2   b   6   f  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:   13   23   3   c   7   g  11   k<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:   14   24   4   d   8   h  12   l<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 5:   99   98  NA  NA   5   e  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 6:  999  998  NA  NA  NA  NA   9   i<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 7: 9999 9998  NA  NA  NA  NA  10   j<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Para hacer un Full join entre varios data.table se va a crear la<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># funcion mergeFull que no es mas que el merge normal con el<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># par\u00e1metro all = TRUE, esto forzar\u00e1 a mostrar todos los id del<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># primer y segundo conjunto <\/span>\r\nmergeFull <span>&lt;-<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/function\"><span style=\"color: #003399;font-weight: bold\">function<\/span><\/a><span style=\"color: #009900\">(<\/span>x<span style=\"color: #339933\">,<\/span> y<span style=\"color: #009900\">)<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/merge\"><span style=\"color: #003399;font-weight: bold\">merge<\/span><\/a><span style=\"color: #009900\">(<\/span>x<span style=\"color: #339933\">,<\/span> y<span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/all\"><span style=\"color: #003399;font-weight: bold\">all<\/span><\/a> = <span style=\"color: #000000;font-weight: bold\">TRUE<\/span><span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Usando Reduce y mergeFull para hacer un Full join entre Dt1, Dt2 y Dt3<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># se puede ver como se aumentan NAs donde no hay match<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/Reduce\"><span style=\"color: #003399;font-weight: bold\">Reduce<\/span><\/a><span style=\"color: #009900\">(<\/span>mergeFull<span style=\"color: #339933\">,<\/span> <a href=\"http:\/\/inside-r.org\/r-doc\/base\/list\"><span style=\"color: #003399;font-weight: bold\">list<\/span><\/a><span style=\"color: #009900\">(<\/span>Dt1<span style=\"color: #339933\">,<\/span> Dt2<span style=\"color: #339933\">,<\/span> Dt3<span style=\"color: #009900\">)<\/span><span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##     id1  id2 c11 c12 c21 c22 c31 c32<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:   11   21   1   a  NA  NA  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:   12   22   2   b   6   f  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:   13   23   3   c   7   g  11   k<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:   14   24   4   d   8   h  12   l<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 5:   99   98  NA  NA   5   e  NA  NA<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 6:  999  998  NA  NA  NA  NA   9   i<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 7: 9999 9998  NA  NA  NA  NA  10   j<\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># *** PARA AUMENTAR FILAS - RBIND ***<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># El comando rbind se usa para aumentar filas a un <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># conjunto de datos, lo siguiente va a producir un<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># error pues las columnas no son las mismas<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/rbind\"><span style=\"color: #003399;font-weight: bold\">rbind<\/span><\/a><span style=\"color: #009900\">(<\/span>Dt1<span style=\"color: #339933\">,<\/span> Dt2<span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## Error: Some colnames of argument 2 (c21,c22) are not present in colnames<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## of item 1. If an argument has colnames they can be in a different order,<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## but they must all be present. Alternatively, you can drop names (by using<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## an unnamed list) and the columns will then be joined by position. Or, set<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## use.names=FALSE.<\/span>\r\n\r\n<span style=\"color: #666666;font-style: italic\"># *** PARA AUMENTAR COLUMNAS - CBIND *** <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># El comando cbind se usa para aumentar columnas a <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># un conjunto de datos.  <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># Aqu\u00ed se puede ver como el cbind (sin opciones activas) <\/span>\r\n<span style=\"color: #666666;font-style: italic\"># no respeta los indices simplemente pone un<\/span>\r\n<span style=\"color: #666666;font-style: italic\"># conjunto a lado de otro (ver el orden de los id)<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/cbind\"><span style=\"color: #003399;font-weight: bold\">cbind<\/span><\/a><span style=\"color: #009900\">(<\/span>Dt1<span style=\"color: #339933\">,<\/span> Dt2<span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 id1 id2 c21 c22<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  11  21   1   a  12  22   6   f<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  12  22   2   b  13  23   7   g<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  13  23   3   c  14  24   8   h<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  14  24   4   d  99  98   5   e<\/span>\r\n<a href=\"http:\/\/inside-r.org\/r-doc\/base\/cbind\"><span style=\"color: #003399;font-weight: bold\">cbind<\/span><\/a><span style=\"color: #009900\">(<\/span>Dt1<span style=\"color: #339933\">,<\/span> Dt2<span style=\"color: #339933\">,<\/span> Dt3<span style=\"color: #009900\">)<\/span>\r\n<span style=\"color: #666666;font-style: italic\">##    id1 id2 c11 c12 id1 id2 c21 c22  id1  id2 c31 c32<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 1:  11  21   1   a  12  22   6   f   13   23  11   k<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 2:  12  22   2   b  13  23   7   g   14   24  12   l<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 3:  13  23   3   c  14  24   8   h  999  998   9   i<\/span>\r\n<span style=\"color: #666666;font-style: italic\">## 4:  14  24   4   d  99  98   5   e 9999 9998  10   j<\/span><\/pre>\n<\/div>\n<\/div>\n<p><a title=\"Created by Pretty R at inside-R.org\" href=\"http:\/\/www.inside-r.org\/pretty-r\">Created by Pretty R at inside-R.org<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>El lector m\u00e1s perspicaz se habr\u00e1 dado cuenta de como realizar un Left Join sin tener el problema con el orden de las columnas, o no? Les dejo la interrogante.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<div style=\"overflow: auto\">\n<p class=\"geshifilter\">Esta semana alguien me pregunt\u00f3 como realizar unos joins utilizando objetos tipo data.table, esta persona dudaba si lo correcto era usar merge, rbind o cbind as\u00ed que hago esta entrada al blog\u00a0aprovechando el script que se us\u00f3 para explicarle las diferencias.<\/p>\n<p>Cuando queremos \"unir\" dos conjuntos de datos en general se &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/blog.espol.edu.ec\/nemo\/2013\/12\/17\/unir-datos-repaso-de-merge-join-cbind-rbind-con-objetos-tipo-data-table-en-r\/\">Seguir leyendo<\/a><\/p>\n<\/div>\n","protected":false},"author":3803,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1688,1534],"tags":[356627,356626,356629,356631,1171628,356635,393,356632,42702,356633,42704,356639,1171627,356625,356634,4709,356636,356637,356640,356628,356630],"class_list":["post-332","post","type-post","status-publish","format-standard","hentry","category-estadistica","category-r","tag-buscarv","tag-cbind","tag-data-table","tag-dtx","tag-estadistica","tag-full-join","tag-informatica","tag-inner-join","tag-join","tag-left-join","tag-merge","tag-multiple-merge","tag-r","tag-rbind","tag-right-join","tag-union","tag-unir-data-tables","tag-unir-tablas","tag-unir-varios-conjuntos-de-datos","tag-vlookup","tag-xy","item-wrap"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/nemo\/wp-json\/wp\/v2\/posts\/332","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/nemo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/nemo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/nemo\/wp-json\/wp\/v2\/users\/3803"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/nemo\/wp-json\/wp\/v2\/comments?post=332"}],"version-history":[{"count":17,"href":"https:\/\/blog.espol.edu.ec\/nemo\/wp-json\/wp\/v2\/posts\/332\/revisions"}],"predecessor-version":[{"id":376,"href":"https:\/\/blog.espol.edu.ec\/nemo\/wp-json\/wp\/v2\/posts\/332\/revisions\/376"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/nemo\/wp-json\/wp\/v2\/media?parent=332"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/nemo\/wp-json\/wp\/v2\/categories?post=332"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/nemo\/wp-json\/wp\/v2\/tags?post=332"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}