Gracias Carlos y otros. Con estas ideas ya me alcanza para empezar a trabajar. El día 11 de marzo de 2012 08:00, <r-help-es-request en r-project.org> escribió:> Envíe los mensajes para la lista R-help-es a > r-help-es en r-project.org > > Para subscribirse o anular su subscripción a través de la WEB > https://stat.ethz.ch/mailman/listinfo/r-help-es > > O por correo electrónico, enviando un mensaje con el texto "help" en > el asunto (subject) o en el cuerpo a: > r-help-es-request en r-project.org > > Puede contactar con el responsable de la lista escribiendo a: > r-help-es-owner en r-project.org > > Si responde a algún contenido de este mensaje, por favor, edite la > linea del asunto (subject) para que el texto sea mas especifico que: > "Re: Contents of R-help-es digest...". Además, por favor, incluya en > la respuesta sólo aquellas partes del mensaje a las que está > respondiendo. > > > Asuntos del día: > > 1. Re: unir 2 dataframe con con igual caso pero distinto valor > en igual variable (Carlos Ortega) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Sat, 10 Mar 2012 18:23:50 +0100 > From: Carlos Ortega <cof en qualityexcellence.es> > To: Sebastian Kruk <residuo.solow en gmail.com> > Cc: r-help-es en r-project.org > Subject: Re: [R-es] unir 2 dataframe con con igual caso pero distinto > valor en igual variable > Message-ID: > <CAOKbq8iGiBXWgj+NCFDdM-eJ4EqJ=QA-XA5NJb2PoPjy24HH9g en mail.gmail.com> > Content-Type: text/plain > > Hola, > > Si tienes varios ficheros hijos y quieres conservar todos los registros que > sean distintos se me ocurre lo siguiente, siguiendo la idea que usé para > juntar Nombre-Apellido-Clase: > > > 1. Juntaría todos los ficheros hijos en uno solo (todos los registros en > un gran data.frame: Lees el fichero, lo guardas en un data.frame temporal, > lees otro nuevo y lo añades al temporal y así con todos... > 2. Uniría todas las columnas, separadas con el "-". Así tendría un > data.frame con una sola columna (Mes-Dia-Año-Nombre-Apellido-Clase). > 3. Sobre esta columna con un simple "unique()" te daría los registros > únicos, quitando las repeticiones. > 4. Ahora tendrías que separar cada parte > de "Mes-Dia-Año-Nombre-Apellido-Clase" por el campo "-". Un ejemplo de > esta forma de separar está en el código que te pasé ayer... > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 10 de marzo de 2012 18:03, Sebastian Kruk <residuo.solow en gmail.com>escribió: > >> Hola, tengo varios ficheros hijos. Por lo cual me interesaria en el >> caso que tengan valores distintos conservarlos todos. >> >> El día 10 de marzo de 2012 14:48, Carlos Ortega >> <cof en qualityexcellence.es> escribió: >> > Hola, >> > >> > No entiendo muy bien la duda que planteas. >> > El problema que tenías era que algunos casos de los ficheros "madre" no >> > existían y los tenías que cruzar con el fichero "hijo" para conseguirlos. >> > >> > Ahora lo que comentas es que..¿tienes varios ficheros hijos? ¿Cada hijo >> > tiene su fichero madre asociado con el que cruzar?. >> > >> > Vaya, el trabajo de cruzar un fichero madre con un hijo, lo puedes >> convertir >> > en una función para que coja los ficheros de un directorio y devuelva >> como >> > resultado un fichero cruzado con los casos comunes y completos. >> > >> > Si puedes dar más detalles del problema... >> > >> > >> > Saludos, >> > Carlos Ortega >> > www.qualityexcellence.es >> > >> > El 10 de marzo de 2012 17:08, Sebastian Kruk <residuo.solow en gmail.com> >> > escribió: >> > >> >> Carlos, muchas gracias. Me funcionó tu solución. >> >> >> >> Me faltó un detalle, yo tengo varios archivos hijos y en varios de >> >> ellos tengo valores para agregar, ¿como hago? >> >> >> >> Saludos, >> >> >> >> Sebastián. >> >> >> >> El día 9 de marzo de 2012 20:04, Carlos Ortega >> >> <cof en qualityexcellence.es> escribió: >> >> > Hola Sebastian, >> >> > >> >> > Mira si este código resuelve el problema que planteas. >> >> > Primero utilizo merge, pero para ello agrupo el campo clave (Nombre, >> >> > Apellido y Clase) en un sólo string. Junto "madre" e "hijo" por este >> >> > campo y >> >> > luego busco los NA que tiene la parte de la "madre" para poner los del >> >> > "hijo" como quieres (es el bucle). >> >> > Y finalmente, deshago lo que agrupé al principio >> Nombre-Apellido-Clase. >> >> > >> >> > Para que esto funcione, es imprescindible que el fichero "madre" lo >> >> > obtengas >> >> > separado por ";" o vaya, los campos que faltan que los puedas extraer >> de >> >> > SPSS completándolos con "NA". >> >> > >> >> > #################################################### >> >> > >> >> > Lin.mad<-"Dia;Mes;Año;Nombre;Apellido;Clase >> >> > 1;;1981;Juan;Perez;A >> >> > 2;2;1981;Maria;Paz;B >> >> > 2;;;Pedro;García;B >> >> > 3;3;1981;José;Lugano;C >> >> > 1;1;1982;José;Lugano;C >> >> > " >> >> > >> >> > mad.df <- read.table(textConnection(Lin.mad), header=T, as.is = TRUE, >> >> > na.strings="NA", sep=";") >> >> > >> >> > >> >> > Lin.hij<-"Dia Mes Año Nombre Apellido Clase >> >> > 1 1 1981 Juan Perez A >> >> > 3 2 1981 Maria Paz B >> >> > 1 2 1982 Pedro García B >> >> > 1 1 1983 José Lugano C >> >> > 1 2 1984 Juan Paz B >> >> > 2 2 1985 Maria García B >> >> > 2 2 1984 Pedro Lugano C >> >> > 2 2 1984 José Lugano A >> >> > 2 2 1981 Juan Perez B >> >> > 2 2 1981 Maria Paz C >> >> > 2 3 1984 Pedro García A >> >> > 3 3 1987 José Lugano C >> >> > 3 3 1990 Juan Paz B >> >> > 3 3 1993 Maria García B >> >> > 3 3 1996 Pedro Lugano A >> >> > 3 4 1999 José Lugano C >> >> > 3 4 2002 Juan Paz C >> >> > 4 4 2005 Maria García B >> >> > " >> >> > >> >> > >> >> > hij.df <- read.table(textConnection(Lin.hij), header=T, as.is >> TRUE, >> >> > na.strings="NA") >> >> > >> >> > >> >> > mad.df.new<-data.frame( >> >> > Dia=mad.df$Dia, >> >> > Mes=mad.df$Mes, >> >> > Año=mad.df$Año, >> >> > >> >> > NAC=paste(mad.df$Nombre,mad.df$Apellido,mad.df$Clase,sep="-") >> >> > ) >> >> > >> >> > hij.df.new<-data.frame( >> >> > Dia=hij.df$Dia, >> >> > Mes=hij.df$Mes, >> >> > Año=hij.df$Año, >> >> > >> >> > NAC=paste(hij.df$Nombre,hij.df$Apellido,hij.df$Clase,sep="-") >> >> > ) >> >> > >> >> > >> >> > com.madre<-merge(hij.df.new,mad.df.new, by.x=4, by.y=4, all.x=F, >> >> > all.y=T) >> >> > #com.tmp<-com.madre >> >> > >> >> > for(i in 1:dim(com.madre)[1]) { >> >> > >> >> > if(is.na(com.madre$Dia.y[i])) >> >> > com.madre$Dia.y[i]<-com.madre$Dia.x[i] >> >> > else com.madre$Dia.y[i]<-com.madre$Dia.y[i] >> >> > >> >> > if(is.na(com.madre$Mes.y[i])) >> >> > com.madre$Mes.y[i]<-com.madre$Mes.x[i] >> >> > else com.madre$Mes.y[i]<-com.madre$Mes.y[i] >> >> > >> >> > if(is.na(com.madre$Año.y[i])) >> >> > com.madre$Año.y[i]<-com.madre$Año.x[i] >> >> > else com.madre$Año.y[i]<-com.madre$Año.y[i] >> >> > >> >> > } >> >> > >> >> > v.tmp<-read.table(text=as.character(com.madre$NAC), sep="-") >> >> > >> >> > com.madre.fin<-data.frame( >> >> > Dia=com.madre$Dia.y, >> >> > Mes=com.madre$Mes.y, >> >> > Año=com.madre$Año.y, >> >> > Nombre=v.tmp$V1, >> >> > Apellido=v.tmp$V2, >> >> > Clase=v.tmp$V3 >> >> > ) >> >> > >> >> > #################################################### >> >> > >> >> > >> >> > >> >> > Saludos, >> >> > Carlos Ortega >> >> > www.qualityexcellence.es >> >> > >> >> > El 9 de marzo de 2012 17:04, Sebastian Kruk <residuo.solow en gmail.com> >> >> > escribió: >> >> >> >> >> >> Estimados usarios de R: >> >> >> >> >> >> Tengo una base de datos madre en formato .sav de SPSS y la quiero >> >> >> modificar usando datos de otras base de datos .sav y otra en .csv a >> >> >> las que llamare hijos. >> >> >> >> >> >> No tengo problema en convertirlas en data.frame. >> >> >> >> >> >> Todos los archivos tienen en común una variable que es única. >> >> >> >> >> >> En aquellos casos que les falta un valor a una variable en el archivo >> >> >> madre lo relleno con el valor del mismo caso que lo tengo en el >> >> >> archivo hijos. >> >> >> >> >> >> El comando merge no me permite hacer lo anterior. ¿Hay alguno más >> >> >> avanzado? >> >> >> >> >> >> El archivo madre es mas corto que cualquiera de los archivos hijos. >> >> >> >> >> >> Un extracto del archivo madre: >> >> >> >> >> >> Dia Mes Año Nombre Apellido Clase >> >> >> 1 1981 Juan Perez A >> >> >> 2 2 1981 Maria Paz B >> >> >> 2 Pedro García B >> >> >> 3 3 1981 José Lugano C >> >> >> 1 1 1982 José Lugano C >> >> >> >> >> >> Un extracto de un archivo hijo: >> >> >> >> >> >> Dia Mes Año Nombre Apellido Clase >> >> >> 1 1 1981 Juan Perez A >> >> >> 3 2 1981 Maria Paz B >> >> >> 1 2 1982 Pedro García B >> >> >> 1 1 1983 José Lugano C >> >> >> 1 2 1984 Juan Paz B >> >> >> 2 2 1985 Maria García B >> >> >> 2 2 1984 Pedro Lugano C >> >> >> 2 2 1984 José Lugano A >> >> >> 2 2 1981 Juan Perez B >> >> >> 2 2 1981 Maria Paz C >> >> >> 2 3 1984 Pedro García A >> >> >> 3 3 1987 José Lugano C >> >> >> 3 3 1990 Juan Paz B >> >> >> 3 3 1993 Maria García B >> >> >> 3 3 1996 Pedro Lugano A >> >> >> 3 4 1999 José Lugano C >> >> >> 3 4 2002 Juan Paz C >> >> >> 4 4 2005 Maria García B >> >> >> >> >> >> Las variables clave son Nombre, Apellido y Clase. >> >> >> >> >> >> Los casos que aparecen en en los archivos hijos distintos del madre >> no >> >> >> interesan. >> >> >> >> >> >> Si hay un NA en el archivo madre y no es NA en el archivo hijo le >> >> >> pongo el valor del archivo hijo. >> >> >> >> >> >> Si el valor en el archivo madre no es NA pero es distinto del valor >> >> >> que aparece en el archivo hijo queda el valor del archivo madre. >> >> >> >> >> >> Desde ya les agradezco la ayuda. >> >> >> >> >> >> Saludos, >> >> >> >> >> >> Sebastián. >> >> >> >> >> >> _______________________________________________ >> >> >> 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 >> > >> > >> > >> > >> > -- >> > Saludos, >> > Carlos Ortega >> > www.qualityexcellence.es >> > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.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 > > > Fin de Resumen de R-help-es, Vol 37, Envío 16 > *********************************************