[R-es] Resumen de R-help-es, Vol 37, Envío 16

Sebastian Kruk residuo.solow en gmail.com
Dom Mar 11 22:46:34 CET 2012


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
> *********************************************



Más información sobre la lista de distribución R-help-es