Hola Me encuentro con un problema al manejar unos datos, estos son tomados de una base de datos que tiene algunos errores, importaciones de programas viejos, etc. Básicamente son dos tablas, la primer tabla identifica al individuo, esta tabla tiene valores mal ingresados. La segunda tabla tiene mediciones. Al buscar desde la tabla de mediciones a los individuos solo obtengo solo los individuos con mediciones, eliminando de esta forma los individuos que no aportan datos encontrándose entre estos muchos errores. El resultado es aproximadamente Individuo 1 fecha medición 1 medición Individuo 1 fecha medición 2 medición Individuo 1 fecha medición 3 medición Individuo 2 fecha medición 1 medición Individuo 2 fecha medición 2 medición Individuo 3 fecha medición 1 medición Individuo 3 fecha medición 2 medición Yo necesito la tabla como la expresada como otra con esta forma Individuo 1 Individuo 2 Individuo 3 ¿Cómo puedo hacer para crear un data.frame que elimine los renglones 2,3,5,7, es decir los que tienen un valor igual al valor del renglón anterior no se tienen en cuenta, y si el valor es distinto debe guardarse en un data.frame? Lógicamente son más datos, unos 240.000 registros, no me es fácil depurarlos a mano. [[alternative HTML version deleted]]
Hola Javier, Puedes hacerlo usando la función reshape. saludos patricia El 30 de marzo de 2010 15:25, Javier Marcuzzi < javier.ruben.marcuzzi@gmail.com> escribió:> Hola > > > > Me encuentro con un problema al manejar unos datos, estos son tomados de > una > base de datos que tiene algunos errores, importaciones de programas viejos, > etc. > > > > Básicamente son dos tablas, la primer tabla identifica al individuo, esta > tabla tiene valores mal ingresados. > > La segunda tabla tiene mediciones. > > Al buscar desde la tabla de mediciones a los individuos solo obtengo solo > los individuos con mediciones, eliminando de esta forma los individuos que > no aportan datos encontrándose entre estos muchos errores. > > > > El resultado es aproximadamente > > > > Individuo 1 fecha medición 1 medición > > Individuo 1 fecha medición 2 medición > > Individuo 1 fecha medición 3 medición > > Individuo 2 fecha medición 1 medición > > Individuo 2 fecha medición 2 medición > > Individuo 3 fecha medición 1 medición > > Individuo 3 fecha medición 2 medición > > > > Yo necesito la tabla como la expresada como otra con esta forma > > > > Individuo 1 > > Individuo 2 > > Individuo 3 > > > > ¿Cómo puedo hacer para crear un data.frame que elimine los renglones > 2,3,5,7, es decir los que tienen un valor igual al valor del renglón > anterior no se tienen en cuenta, y si el valor es distinto debe guardarse > en > un data.frame? Lógicamente son más datos, unos 240.000 registros, no me es > fácil depurarlos a mano. > > > > > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Hola, ¿qué tal? ¿Eliminarlos? ¿Quedándote únicamente con la primera fecha? ¿Con qué criterio? Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 30 de marzo de 2010 15:25, Javier Marcuzzi <javier.ruben.marcuzzi en gmail.com> escribió:> Hola > > > > Me encuentro con un problema al manejar unos datos, estos son tomados de una > base de datos que tiene algunos errores, importaciones de programas viejos, > etc. > > > > Básicamente son dos tablas, la primer tabla identifica al individuo, esta > tabla tiene valores mal ingresados. > > La segunda tabla tiene mediciones. > > Al buscar desde la tabla de mediciones a los individuos solo obtengo solo > los individuos con mediciones, eliminando de esta forma los individuos que > no aportan datos encontrándose entre estos muchos errores. > > > > El resultado es aproximadamente > > > > Individuo 1 fecha medición 1 medición > > Individuo 1 fecha medición 2 medición > > Individuo 1 fecha medición 3 medición > > Individuo 2 fecha medición 1 medición > > Individuo 2 fecha medición 2 medición > > Individuo 3 fecha medición 1 medición > > Individuo 3 fecha medición 2 medición > > > > Yo necesito la tabla como la expresada como otra con esta forma > > > > Individuo 1 > > Individuo 2 > > Individuo 3 > > > > ¿Cómo puedo hacer para crear un data.frame que elimine los renglones > 2,3,5,7, es decir los que tienen un valor igual al valor del renglón > anterior no se tienen en cuenta, y si el valor es distinto debe guardarse en > un data.frame? Lógicamente son más datos, unos 240.000 registros, no me es > fácil depurarlos a mano. > > > > > > > [[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 > >
Buenos dias Javier, Te sugiero lo siguiente: # datos ind <- rep(c(1, 2, 3), c(3, 2, 2)) fecha <- ind med <- c(4, 2, 1, 3, 4, 8, 5) d <- data.frame(ind, fecha, med) d ind fecha med 1 1 1 4 2 1 1 2 3 1 1 1 4 2 2 3 5 2 2 4 6 3 3 8 7 3 3 5 # resultado # -- por individuo, toma las medidas realizadas # -- y luego determina las diferencias entre ellas # -- finalmente reporta el resultado (es una lista) # -- luego hacemos do.call(c,...) para concatenarla # -- finalmente seleccionamos aquellas diferencia cero res <- with(d, tapply(med, ind, function(x) c(0, diff(x)))) res $`1` [1] 0 -2 -1 $`2` [1] 0 1 $`3` [1] 0 -3 # seleccion d[do.call(c, res) == 0, ] ind fecha med 1 1 1 4 4 2 2 3 6 3 3 8 Espero sea de utilidad, Jorge Ivan Velez 2010/3/30 Javier Marcuzzi <>> Hola > > > > Me encuentro con un problema al manejar unos datos, estos son tomados de > una > base de datos que tiene algunos errores, importaciones de programas viejos, > etc. > > > > Básicamente son dos tablas, la primer tabla identifica al individuo, esta > tabla tiene valores mal ingresados. > > La segunda tabla tiene mediciones. > > Al buscar desde la tabla de mediciones a los individuos solo obtengo solo > los individuos con mediciones, eliminando de esta forma los individuos que > no aportan datos encontrándose entre estos muchos errores. > > > > El resultado es aproximadamente > > > > Individuo 1 fecha medición 1 medición > > Individuo 1 fecha medición 2 medición > > Individuo 1 fecha medición 3 medición > > Individuo 2 fecha medición 1 medición > > Individuo 2 fecha medición 2 medición > > Individuo 3 fecha medición 1 medición > > Individuo 3 fecha medición 2 medición > > > > Yo necesito la tabla como la expresada como otra con esta forma > > > > Individuo 1 > > Individuo 2 > > Individuo 3 > > > > ¿Cómo puedo hacer para crear un data.frame que elimine los renglones > 2,3,5,7, es decir los que tienen un valor igual al valor del renglón > anterior no se tienen en cuenta, y si el valor es distinto debe guardarse > en > un data.frame? Lógicamente son más datos, unos 240.000 registros, no me es > fácil depurarlos a mano. > > > > > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Javier, Mi anterior intento deberia haber sido res <- do.call(c, with(d, tapply(med, ind, function(x) c(NA, diff(x))))) d[res != 0, ] Aunque a''un no me queda claro si solo quieres guardar la primera observacion por individuo o aquellas que cumplan el criterio de no ser iguales a la inmediatamente anterior. Si lo que en realidad buscas es lo segundo, entonces lo que ahora te env''io funcionar''a mejor. En caso de que sea lo segundo, una variaci''on de lo anterior o una implementaci''on con aggregate() podr''ias hacerlo. Saludos, --JIV 2010/3/30 Jorge Ivan Velez <>> Buenos dias Javier, > > Te sugiero lo siguiente: > > # datos > ind <- rep(c(1, 2, 3), c(3, 2, 2)) > fecha <- ind > med <- c(4, 2, 1, 3, 4, 8, 5) > d <- data.frame(ind, fecha, med) > d > ind fecha med > 1 1 1 4 > 2 1 1 2 > 3 1 1 1 > 4 2 2 3 > 5 2 2 4 > 6 3 3 8 > 7 3 3 5 > > # resultado > # -- por individuo, toma las medidas realizadas > # -- y luego determina las diferencias entre ellas > # -- finalmente reporta el resultado (es una lista) > # -- luego hacemos do.call(c,...) para concatenarla > # -- finalmente seleccionamos aquellas diferencia cero > res <- with(d, tapply(med, ind, function(x) c(0, diff(x)))) > res > $`1` > [1] 0 -2 -1 > > $`2` > [1] 0 1 > > $`3` > [1] 0 -3 > > # seleccion > d[do.call(c, res) == 0, ] > ind fecha med > 1 1 1 4 > 4 2 2 3 > 6 3 3 8 > > Espero sea de utilidad, > > Jorge Ivan Velez > > > 2010/3/30 Javier Marcuzzi <> > >> Hola >> >> >> >> Me encuentro con un problema al manejar unos datos, estos son tomados de >> una >> base de datos que tiene algunos errores, importaciones de programas >> viejos, >> etc. >> >> >> >> Básicamente son dos tablas, la primer tabla identifica al individuo, esta >> tabla tiene valores mal ingresados. >> >> La segunda tabla tiene mediciones. >> >> Al buscar desde la tabla de mediciones a los individuos solo obtengo solo >> los individuos con mediciones, eliminando de esta forma los individuos que >> no aportan datos encontrándose entre estos muchos errores. >> >> >> >> El resultado es aproximadamente >> >> >> >> Individuo 1 fecha medición 1 medición >> >> Individuo 1 fecha medición 2 medición >> >> Individuo 1 fecha medición 3 medición >> >> Individuo 2 fecha medición 1 medición >> >> Individuo 2 fecha medición 2 medición >> >> Individuo 3 fecha medición 1 medición >> >> Individuo 3 fecha medición 2 medición >> >> >> >> Yo necesito la tabla como la expresada como otra con esta forma >> >> >> >> Individuo 1 >> >> Individuo 2 >> >> Individuo 3 >> >> >> >> ¿Cómo puedo hacer para crear un data.frame que elimine los renglones >> 2,3,5,7, es decir los que tienen un valor igual al valor del renglón >> anterior no se tienen en cuenta, y si el valor es distinto debe guardarse >> en >> un data.frame? Lógicamente son más datos, unos 240.000 registros, no me es >> fácil depurarlos a mano. >> >> >> >> >> >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >[[alternative HTML version deleted]]
Hola, Si "x" es el data frame, puedes usar x[!duplicated(x[[1L]]),] que elimina todas las filas que tienen duplicado el valor de la primera columna. Un saludo ------------------------------ Date: Tue, 30 Mar 2010 10:25:51 -0300 From: "Javier Marcuzzi" <javier.ruben.marcuzzi en gmail.com> To: <r-help-es en r-project.org> Subject: [R-es] limpieza datos Message-ID: <4bb1fbcd.2a7ae70a.0b03.fffff5aa en mx.google.com> Content-Type: text/plain Hola Me encuentro con un problema al manejar unos datos, estos son tomados de una base de datos que tiene algunos errores, importaciones de programas viejos, etc. Básicamente son dos tablas, la primer tabla identifica al individuo, esta tabla tiene valores mal ingresados. La segunda tabla tiene mediciones. Al buscar desde la tabla de mediciones a los individuos solo obtengo solo los individuos con mediciones, eliminando de esta forma los individuos que no aportan datos encontrándose entre estos muchos errores. El resultado es aproximadamente Individuo 1 fecha medición 1 medición Individuo 1 fecha medición 2 medición Individuo 1 fecha medición 3 medición Individuo 2 fecha medición 1 medición Individuo 2 fecha medición 2 medición Individuo 3 fecha medición 1 medición Individuo 3 fecha medición 2 medición Yo necesito la tabla como la expresada como otra con esta forma Individuo 1 Individuo 2 Individuo 3 ¿Cómo puedo hacer para crear un data.frame que elimine los renglones 2,3,5,7, es decir los que tienen un valor igual al valor del renglón anterior no se tienen en cuenta, y si el valor es distinto debe guardarse en un data.frame? Lógicamente son más datos, unos 240.000 registros, no me es fácil depurarlos a mano. [[alternative HTML version deleted]]