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@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@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@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@r-project.org
> >> https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
> >
> >
> >
> > --
> > Saludos,
> > Carlos Ortega
> > www.qualityexcellence.es
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]

