Buenas, Tengo dos data.frames de la siguiente manera library(data.table) id<-c("a1","a2","a3","a4") id2<-c("a2","a3","a1","a4") y<-c(1,2,3,4) z<-c(3,5,6,7) k<-c(1,3,8,7) df1<-data.table(id,y,z) id<-c("a2","a3","a1","a4") df2<-data.table(id,x,y) Quiero que el resultado sea solo el LEFT JOIN, es decir, que me devuelva: resultado--> id,x,y,z Para ello pruebo, tal y como dicen en: https://rstudio-pubs-static.s3.amazonaws.com/52230_5ae0d25125b544caab32f75f0360e775.html merge(df1,df2,by="id",all.x=TRUE) Pero me devuelve: id y.x z x y.y 1: a1 1 3 3 3 2: a2 2 5 0 1 3: a3 3 6 2 2 4: a4 4 7 1 4 Es decir, me está duplicando la columna y. He probado con data.frame y usando all=FALSE, all.x=T,... pero no lo consigo. ¿Alguna idea de como puedo hacerlo? Gracais [[alternative HTML version deleted]]
Es normal que te esté dando ese resultado. Las columnas "y" de df1 y de df2 no son iguales... Si pruebas con "dplyr" el resultado es este:> library(dplyr) > left_join(df1, df2)Joining, by = c("id", "y") id y z x 1 a1 1 3 NA 2 a2 2 5 NA 3 a3 3 6 NA 4 a4 4 7 7 Que a lo mejor es lo que quieres... Saludos, Carlos Ortega www.qualityexcellence.es El 9 de octubre de 2017, 12:45, Jesús Para Fernández < j.para.fernandez en hotmail.com> escribió:> Buenas, > > Tengo dos data.frames de la siguiente manera > > library(data.table) > id<-c("a1","a2","a3","a4") > id2<-c("a2","a3","a1","a4") > y<-c(1,2,3,4) > z<-c(3,5,6,7) > k<-c(1,3,8,7) > > df1<-data.table(id,y,z) > > id<-c("a2","a3","a1","a4") > df2<-data.table(id,x,y) > > Quiero que el resultado sea solo el LEFT JOIN, es decir, que me devuelva: > > resultado--> id,x,y,z > > Para ello pruebo, tal y como dicen en: > https://rstudio-pubs-static.s3.amazonaws.com/52230_ > 5ae0d25125b544caab32f75f0360e775.html > > merge(df1,df2,by="id",all.x=TRUE) > > Pero me devuelve: > > id y.x z x y.y > 1: a1 1 3 3 3 > 2: a2 2 5 0 1 > 3: a3 3 6 2 2 > 4: a4 4 7 1 4 > > > Es decir, me está duplicando la columna y. > > He probado con data.frame y usando all=FALSE, all.x=T,... pero no lo > consigo. > > ¿Alguna idea de como puedo hacerlo? > > Gracais > > [[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]]
Hola Entiendo que donde pusiste k<-c(1,3,8,7) querías poner x<-c(1,3,8,7) Si es correcto, creo que el problema es que al ser "y" una variable presente en las dos tablas, o la incluyes como argumento para el cruce o te saldrá "duplicada" (le añade un punto para diferenciarla).¿es esto lo que quieres? merge(df1,df2,by=c("id", "y"),all.x=TRUE) id y z x 1: a1 1 3 NA 2: a2 2 5 NA 3: a3 3 6 NA 4: a4 4 7 7 El Lunes 9 de octubre de 2017 12:45, Jesús Para Fernández <j.para.fernandez en hotmail.com> escribió: Buenas, Tengo dos data.frames de la siguiente manera library(data.table) id<-c("a1","a2","a3","a4") id2<-c("a2","a3","a1","a4") y<-c(1,2,3,4) z<-c(3,5,6,7) k<-c(1,3,8,7) df1<-data.table(id,y,z) id<-c("a2","a3","a1","a4") df2<-data.table(id,x,y) Quiero que el resultado sea solo el LEFT JOIN, es decir, que me devuelva: resultado--> id,x,y,z Para ello pruebo, tal y como dicen en: https://rstudio-pubs-static.s3.amazonaws.com/52230_5ae0d25125b544caab32f75f0360e775.html merge(df1,df2,by="id",all.x=TRUE) Pero me devuelve: id y.x z x y.y 1: a1 1 3 3 3 2: a2 2 5 0 1 3: a3 3 6 2 2 4: a4 4 7 1 4 Es decir, me est? duplicando la columna y. He probado con data.frame y usando all=FALSE, all.x=T,... pero no lo consigo. ?Alguna idea de como puedo hacerlo? Gracais [[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]]
Gracias, Entiendo el resultado, pero claro, si el numero de columnas a agregar coincidentes son muchas, agregarlas obviandolas no es trivial. Creare por lo tanto una fórmula que elimine todas las columans coincidentes tras ser unidas. Gracias de todos modos Jesús ________________________________ De: jose luis <pepeceb en yahoo.es> Enviado: lunes, 9 de octubre de 2017 13:48 Para: Jesús Para Fernández; r-help-es en r-project.org Asunto: Re: [R-es] Merge me agrega siempre las columnas Hola Entiendo que donde pusiste k<-c(1,3,8,7) querías poner x<-c(1,3,8,7) Si es correcto, creo que el problema es que al ser "y" una variable presente en las dos tablas, o la incluyes como argumento para el cruce o te saldrá "duplicada" (le añade un punto para diferenciarla). ¿es esto lo que quieres? merge(df1,df2,by=c("id", "y"),all.x=TRUE) id y z x 1: a1 1 3 NA 2: a2 2 5 NA 3: a3 3 6 NA 4: a4 4 7 7 El Lunes 9 de octubre de 2017 12:45, Jesús Para Fernández <j.para.fernandez en hotmail.com> escribió: Buenas, Tengo dos data.frames de la siguiente manera library(data.table) id<-c("a1","a2","a3","a4") id2<-c("a2","a3","a1","a4") y<-c(1,2,3,4) z<-c(3,5,6,7) k<-c(1,3,8,7) df1<-data.table(id,y,z) id<-c("a2","a3","a1","a4") df2<-data.table(id,x,y) Quiero que el resultado sea solo el LEFT JOIN, es decir, que me devuelva: resultado--> id,x,y,z Para ello pruebo, tal y como dicen en: https://rstudio-pubs-static.s3.amazonaws.com/52230_5ae0d25125b544caab32f75f0360e775.html merge(df1,df2,by="id",all.x=TRUE) Pero me devuelve: id y.x z x y.y 1: a1 1 3 3 3 2: a2 2 5 0 1 3: a3 3 6 2 2 4: a4 4 7 1 4 Es decir, me est? duplicando la columna y. He probado con data.frame y usando all=FALSE, all.x=T,... pero no lo consigo. ?Alguna idea de como puedo hacerlo? Gracais [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es en r-project.org<mailto:R-help-es en r-project.org> https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]