Holabueno, aunque hay muchas posibilidades para fusionar ambas tablas, usando la tuya sería algo así:Df3<-merge(Df1,Df2,by="Reviewer.Username", all = TRUE) El Lunes 16 de enero de 2017 20:08, Jesús Para Fernández <j.para.fernandez en hotmail.com> escribió: Los data.frames para unirlos lo mejor es que tengan el mismo numero de columnas o variables. El dataframe2 tiene 17 y el 1 8. Si solo quieres unir esa variable, pon: nuevo.df<-rbind(Df1$Reviewer.Username,Df2$Reviewer.Username) Si quieres crear un nuevo data.frame entero, tendras que poner en el primer data.frame las variables del data.frame2 com ovacias: Df1$variablefaltante1<-NA Df1$variablefaltante2<-NA ............................. y luego unir los data.frames nuevo.df<-rbind(Df1,Df2) Un saludo Jesús ________________________________ De: R-help-es <r-help-es-bounces en r-project.org> en nombre de miriam.alzate en unavarra.es <miriam.alzate en unavarra.es> Enviado: lunes, 16 de enero de 2017 19:48 Para: r-help-es en r-project.org Asunto: [R-es] Error al fusionar tablas Buenas tardes, Estoy tratando de fusionar dos data.frames pero no obtengo lo deseado. Un data.frame (Df1)tiene 53.657 observaciones (y 8 variables) que pertenecen una a cada individuo de la muestra. El otro (Df2) tiene 63.987 observaciones (y 17 variables), de los 53.657 individuos previos porque algun individuo tiene varias observaciones. Ambos solo coinciden por la variable "Reviewer.Username". Quiero fusionar ambos data.frame por la columna "Reviewer.Username", pero la tabla resultante solo me da 76 observaciones, cuando realmente necesitaría tener 63.987 observaciones. Cada individuo de la muestra ha escrito 1 o más reviews, por eso puede que tenga más de una observación en el Df2, pero necesito que cada linea de este Df2 tenga asignados los datos pertenecientes a ese individuo del Df1. Hago el comando: Df3<-merge(Df1,Df2,by.x="Reviewer.Username") Pero me da solo 76 observaciones. ¿Me podéis ayudar? Muchas gracias _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es Página de Información de R-help-es<https://stat.ethz.ch/mailman/listinfo/r-help-es> stat.ethz.ch Esta es una lista de correo para solicitar ayuda sobre R en español y se entiende como un complemento social a la documentación, libros, etc. disponibles sobre R ... [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]
Hola, Los data.frames *no* tienen porqué ser iguales en longitud, ni tan siquiera en el número de columnas. Para que al cruzar, te devuelva no sólo las filas comunes (una vez defines la columna común) si no todas, tienes que indicar el parámetro "*all=TRUE*", en el merge() como has hecho. Las filas de los dos data.frames que no tengan valores en columnas iguales, los completará con "NA". Mira el ejemplo de "merge()" en el epígrafe de "Details" en el último párrafo: *"In SQL database terminology, the default value of all = FALSE gives a natural join, a special case of an inner join. Specifying all.x = TRUE gives a left (outer) join, all.y = TRUE a right (outer) join, and both (all = TRUE a (full) outer join. DBMSes do not match NULL records, equivalent to incomparables = NA in R."* Saludos, Carlos Ortega www.qualityexcellence.es El 16 de enero de 2017, 20:20, jose luis via R-help-es < r-help-es en r-project.org> escribió:> Holabueno, aunque hay muchas posibilidades para fusionar ambas tablas, > usando la tuya sería algo así:Df3<-merge(Df1,Df2,by="Reviewer.Username", > all = TRUE) > > > > > El Lunes 16 de enero de 2017 20:08, Jesús Para Fernández < > j.para.fernandez en hotmail.com> escribió: > > > Los data.frames para unirlos lo mejor es que tengan el mismo numero de > columnas o variables. > > > El dataframe2 tiene 17 y el 1 8. > > > Si solo quieres unir esa variable, pon: > > > nuevo.df<-rbind(Df1$Reviewer.Username,Df2$Reviewer.Username) > > > Si quieres crear un nuevo data.frame entero, tendras que poner en el > primer data.frame las variables del data.frame2 com ovacias: > > > Df1$variablefaltante1<-NA > > Df1$variablefaltante2<-NA > > ............................. > > > y luego unir los data.frames > > > nuevo.df<-rbind(Df1,Df2) > > > Un saludo > > Jesús > > > > ________________________________ > De: R-help-es <r-help-es-bounces en r-project.org> en nombre de > miriam.alzate en unavarra.es <miriam.alzate en unavarra.es> > Enviado: lunes, 16 de enero de 2017 19:48 > Para: r-help-es en r-project.org > Asunto: [R-es] Error al fusionar tablas > > > Buenas tardes, > > Estoy tratando de fusionar dos data.frames pero no obtengo lo deseado. > Un data.frame (Df1)tiene 53.657 observaciones (y 8 variables) que > pertenecen una a cada individuo de la muestra. El otro (Df2) tiene 63.987 > observaciones (y 17 variables), de los 53.657 individuos previos porque > algun individuo tiene varias observaciones. Ambos solo coinciden por la > variable "Reviewer.Username". > > Quiero fusionar ambos data.frame por la columna "Reviewer.Username", pero > la tabla resultante solo me da 76 observaciones, cuando realmente > necesitaría tener 63.987 observaciones. Cada individuo de la muestra ha > escrito 1 o más reviews, por eso puede que tenga más de una observación en > el Df2, pero necesito que cada linea de este Df2 tenga asignados los datos > pertenecientes a ese individuo del Df1. > > Hago el comando: > > Df3<-merge(Df1,Df2,by.x="Reviewer.Username") > > Pero me da solo 76 observaciones. > > ¿Me podéis ayudar? > > Muchas gracias > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > Página de Información de R-help-es<https://stat.ethz. > ch/mailman/listinfo/r-help-es> > stat.ethz.ch > Esta es una lista de correo para solicitar ayuda sobre R en español y se > entiende como un complemento social a la documentación, libros, etc. > disponibles sobre R ... > > > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Buenas tardes, El problema está ya resuelto. Muchas gracias a todos por vuestra ayuda. El problema estaba en que la variable común con la que quería fusionar las dos tablas tenía espacios en blanco al final en una de las tablas y no en la otra. Por ello, parecía como que entre las dos tablas no hubiera coincidencias. Se ha solucionado eliminando el espacio en blanco de la columna en las dos tablas. El nombre de una tabla es "Reviews1" y el de la otra "Original.Reviewers". El nombre de la columna es "Reviewer.Username". Este sería el código:> > #-------------------- > library(stringr) > Reviews1$fe_Reviewer.Username <- str_trim(Reviews1$Reviewer.Username, > 'both') > Original.Reviewers$fe_Reviewer.Username <- > str_trim(Original.Reviewers$Reviewer.Username, 'both') > > res_end <- merge( > Reviews1, Original.Reviewers, > by.x="fe_Reviewer.Username", > by.y="fe_Reviewer.Username", > all.x=TRUE > )El Lun, 16 de Enero de 2017, 21:35, Carlos Ortega escribió:> Hola, > > Los data.frames *no* tienen porqué ser iguales en longitud, ni tan > siquiera > en el número de columnas. > Para que al cruzar, te devuelva no sólo las filas comunes (una vez defines > la columna común) si no todas, tienes que indicar el parámetro > "*all=TRUE*", > en el merge() como has hecho. > > Las filas de los dos data.frames que no tengan valores en columnas > iguales, > los completará con "NA". > > Mira el ejemplo de "merge()" en el epígrafe de "Details" en el último > párrafo: > > *"In SQL database terminology, the default value of all = FALSE gives a > natural join, a special case of an inner join. Specifying all.x = TRUE > gives a left (outer) join, all.y = TRUE a right (outer) join, and both > (all > = TRUE a (full) outer join. DBMSes do not match NULL records, equivalent > to > incomparables = NA in R."* > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > El 16 de enero de 2017, 20:20, jose luis via R-help-es < > r-help-es en r-project.org> escribió: > >> Holabueno, aunque hay muchas posibilidades para fusionar ambas tablas, >> usando la tuya sería algo así:Df3<-merge(Df1,Df2,by="Reviewer.Username", >> all = TRUE) >> >> >> >> >> El Lunes 16 de enero de 2017 20:08, Jesús Para Fernández < >> j.para.fernandez en hotmail.com> escribió: >> >> >> Los data.frames para unirlos lo mejor es que tengan el mismo numero de >> columnas o variables. >> >> >> El dataframe2 tiene 17 y el 1 8. >> >> >> Si solo quieres unir esa variable, pon: >> >> >> nuevo.df<-rbind(Df1$Reviewer.Username,Df2$Reviewer.Username) >> >> >> Si quieres crear un nuevo data.frame entero, tendras que poner en el >> primer data.frame las variables del data.frame2 com ovacias: >> >> >> Df1$variablefaltante1<-NA >> >> Df1$variablefaltante2<-NA >> >> ............................. >> >> >> y luego unir los data.frames >> >> >> nuevo.df<-rbind(Df1,Df2) >> >> >> Un saludo >> >> Jesús >> >> >> >> ________________________________ >> De: R-help-es <r-help-es-bounces en r-project.org> en nombre de >> miriam.alzate en unavarra.es <miriam.alzate en unavarra.es> >> Enviado: lunes, 16 de enero de 2017 19:48 >> Para: r-help-es en r-project.org >> Asunto: [R-es] Error al fusionar tablas >> >> >> Buenas tardes, >> >> Estoy tratando de fusionar dos data.frames pero no obtengo lo deseado. >> Un data.frame (Df1)tiene 53.657 observaciones (y 8 variables) que >> pertenecen una a cada individuo de la muestra. El otro (Df2) tiene >> 63.987 >> observaciones (y 17 variables), de los 53.657 individuos previos porque >> algun individuo tiene varias observaciones. Ambos solo coinciden por la >> variable "Reviewer.Username". >> >> Quiero fusionar ambos data.frame por la columna "Reviewer.Username", >> pero >> la tabla resultante solo me da 76 observaciones, cuando realmente >> necesitaría tener 63.987 observaciones. Cada individuo de la muestra ha >> escrito 1 o más reviews, por eso puede que tenga más de una observación >> en >> el Df2, pero necesito que cada linea de este Df2 tenga asignados los >> datos >> pertenecientes a ese individuo del Df1. >> >> Hago el comando: >> >> Df3<-merge(Df1,Df2,by.x="Reviewer.Username") >> >> Pero me da solo 76 observaciones. >> >> ¿Me podéis ayudar? >> >> Muchas gracias >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> Página de Información de R-help-es<https://stat.ethz. >> ch/mailman/listinfo/r-help-es> >> stat.ethz.ch >> Esta es una lista de correo para solicitar ayuda sobre R en español y se >> entiende como un complemento social a la documentación, libros, etc. >> disponibles sobre R ... >> >> >> >> >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >