Necesito algo de programación básica para resolver un problema, un inconveniente es que intente "if", cuándo se lo aplico digamos a x <- 5 no hay drama, pero si es a leche$litros me dice que solo se toma el primer elemento. Como pueden ver estoy re perdido. Mi problema: los datos están en un data.frame como el siguiente animal inicio fin control idlactancias Cle_KilosOrdenie1 DL 1 1482 2006-08-08 2007-08-23 2007-02-23 4353 11.4 199 days 2 1482 2004-08-08 2005-05-01 2004-12-21 4351 11.0 135 days 3 1482 2004-08-08 2005-05-01 2005-04-26 4351 11.0 261 days 4 1482 2005-05-02 2006-08-07 2005-05-24 4352 7.8 22 days 5 1482 2006-08-08 2007-08-23 2007-06-25 4353 7.8 321 days 6 1482 2005-05-02 2006-08-07 2005-12-26 4352 7.4 238 days 7 1482 2006-08-08 2007-08-23 2007-01-24 4353 14.8 169 days 8 1482 2006-08-08 2007-08-23 2007-07-24 4353 7.4 350 days 9 1482 2004-08-08 2005-05-01 2004-11-23 4351 16.2 107 days 10 1482 2005-05-02 2006-08-07 2005-07-26 4352 9.0 85 days 11 1482 2006-08-08 2007-08-23 2006-11-20 4353 20.2 104 days 12 1482 2005-05-02 2006-08-07 2005-08-24 4352 9.4 114 days 13 1482 2006-08-08 2007-08-23 2007-04-26 4353 10.2 261 days Por cada animal tengo fecha de inicio, fecha de final, y entre estas fechas de control. En la fecha de inicio y final no hay control, salvo que justo ese día se realice el control, pero los controles son una vez al mes, por lo cuál es mucha casualidad. En los controles se realizan mediciones, por lo cuál hay una fecha y un número asociado a esa fecha. La formula matemática es desde el inicio hasta la fecha del primer control, entre las fechas de controles, y desde la fecha de ultimo control a la fecha de fin. Los números se multiplican por la diferencia de días entre las fechas, salvo los dos extremos. El problema radica en que los datos no son por ejemplo, inicio, control 1, control 2, control 3, fin. Pudiendo hacer una hoja de calculo resolviendo rápidamente el inconveniente, cada animal tiene inicio, diferente números de fechas de control con sus números, y casi todos fecha de final, porque hay algunos que no llegaron al final, entonces tienen inicio, dos controles y cuándo pase el tiempo ... Lo que yo pené es buscar la menor fecha por animal, la mayor fecha por animal, de esta forma tengo la fecha de inicio y final, y luego las fechas que se encuentren entre estas dos. Teniendo estas fechas puedo aplicar la formula que tiene las tres partes inicio, entre controles, final. Claro que todo esto se debe realizar por todo el data.frame y para todos los animales. El resultado final es un número que resume todo lo producido entre la fecha inicial y final (o hasta donde se midió), por cada animal.
Hola Javier, la verdad es que está un poco confuso tu mail. No entiendo muy bien que es lo que quieres hacer. Cada animal tiene un solo registro? O varios? Podrías poner el código que has intentado usar? Luciano El día 3 de noviembre de 2009 11:20, Javier Marcuzzi <javiermarcuzzi en me.com> escribió:> Necesito algo de programación básica para resolver un problema, un > inconveniente es que intente "if", cuándo se lo aplico digamos a x <- 5 no > hay drama, pero si es a leche$litros me dice que solo se toma el primer > elemento. Como pueden ver estoy re perdido. > > Mi problema: los datos están en un data.frame como el siguiente > > animal inicio fin control idlactancias Cle_KilosOrdenie1 > DL > 1 1482 2006-08-08 2007-08-23 2007-02-23 4353 11.4 > 199 days > 2 1482 2004-08-08 2005-05-01 2004-12-21 4351 11.0 > 135 days > 3 1482 2004-08-08 2005-05-01 2005-04-26 4351 11.0 > 261 days > 4 1482 2005-05-02 2006-08-07 2005-05-24 4352 7.8 > 22 days > 5 1482 2006-08-08 2007-08-23 2007-06-25 4353 7.8 > 321 days > 6 1482 2005-05-02 2006-08-07 2005-12-26 4352 7.4 > 238 days > 7 1482 2006-08-08 2007-08-23 2007-01-24 4353 14.8 > 169 days > 8 1482 2006-08-08 2007-08-23 2007-07-24 4353 7.4 > 350 days > 9 1482 2004-08-08 2005-05-01 2004-11-23 4351 16.2 > 107 days > 10 1482 2005-05-02 2006-08-07 2005-07-26 4352 9.0 > 85 days > 11 1482 2006-08-08 2007-08-23 2006-11-20 4353 20.2 > 104 days > 12 1482 2005-05-02 2006-08-07 2005-08-24 4352 9.4 > 114 days > 13 1482 2006-08-08 2007-08-23 2007-04-26 4353 10.2 > 261 days > > > Por cada animal tengo fecha de inicio, fecha de final, y entre estas fechas > de control. En la fecha de inicio y final no hay control, salvo que justo > ese día se realice el control, pero los controles son una vez al mes, por lo > cuál es mucha casualidad. En los controles se realizan mediciones, por lo > cuál hay una fecha y un número asociado a esa fecha. > > La formula matemática es desde el inicio hasta la fecha del primer control, > entre las fechas de controles, y desde la fecha de ultimo control a la fecha > de fin. Los números se multiplican por la diferencia de días entre las > fechas, salvo los dos extremos. > > El problema radica en que los datos no son por ejemplo, inicio, control 1, > control 2, control 3, fin. Pudiendo hacer una hoja de calculo resolviendo > rápidamente el inconveniente, cada animal tiene inicio, diferente números de > fechas de control con sus números, y casi todos fecha de final, porque hay > algunos que no llegaron al final, entonces tienen inicio, dos controles y > cuándo pase el tiempo ... > > Lo que yo pené es buscar la menor fecha por animal, la mayor fecha por > animal, de esta forma tengo la fecha de inicio y final, y luego las fechas > que se encuentren entre estas dos. Teniendo estas fechas puedo aplicar la > formula que tiene las tres partes inicio, entre controles, final. Claro que > todo esto se debe realizar por todo el data.frame y para todos los animales. > El resultado final es un número que resume todo lo producido entre la fecha > inicial y final (o hasta donde se midió), por cada animal. > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >
Hola: la función if (?if.) tiene como primer argumento un vector lógico de longitud uno, si queres usar un argumento lógico de longitud mayor a uno entonces debes usar la función ifelse (?ifelse) Gabriela ----- Original Message ----- From: "Javier Marcuzzi" <javiermarcuzzi en me.com> To: <R-help-es en r-project.org> Sent: Tuesday, November 03, 2009 11:20 AM Subject: [R-es] programación básica Necesito algo de programación básica para resolver un problema, un inconveniente es que intente "if", cuándo se lo aplico digamos a x <- 5 no hay drama, pero si es a leche$litros me dice que solo se toma el primer elemento. Como pueden ver estoy re perdido. Mi problema: los datos están en un data.frame como el siguiente animal inicio fin control idlactancias Cle_KilosOrdenie1 DL 1 1482 2006-08-08 2007-08-23 2007-02-23 4353 11.4 199 days 2 1482 2004-08-08 2005-05-01 2004-12-21 4351 11.0 135 days 3 1482 2004-08-08 2005-05-01 2005-04-26 4351 11.0 261 days 4 1482 2005-05-02 2006-08-07 2005-05-24 4352 7.8 22 days 5 1482 2006-08-08 2007-08-23 2007-06-25 4353 7.8 321 days 6 1482 2005-05-02 2006-08-07 2005-12-26 4352 7.4 238 days 7 1482 2006-08-08 2007-08-23 2007-01-24 4353 14.8 169 days 8 1482 2006-08-08 2007-08-23 2007-07-24 4353 7.4 350 days 9 1482 2004-08-08 2005-05-01 2004-11-23 4351 16.2 107 days 10 1482 2005-05-02 2006-08-07 2005-07-26 4352 9.0 85 days 11 1482 2006-08-08 2007-08-23 2006-11-20 4353 20.2 104 days 12 1482 2005-05-02 2006-08-07 2005-08-24 4352 9.4 114 days 13 1482 2006-08-08 2007-08-23 2007-04-26 4353 10.2 261 days Por cada animal tengo fecha de inicio, fecha de final, y entre estas fechas de control. En la fecha de inicio y final no hay control, salvo que justo ese día se realice el control, pero los controles son una vez al mes, por lo cuál es mucha casualidad. En los controles se realizan mediciones, por lo cuál hay una fecha y un número asociado a esa fecha. La formula matemática es desde el inicio hasta la fecha del primer control, entre las fechas de controles, y desde la fecha de ultimo control a la fecha de fin. Los números se multiplican por la diferencia de días entre las fechas, salvo los dos extremos. El problema radica en que los datos no son por ejemplo, inicio, control 1, control 2, control 3, fin. Pudiendo hacer una hoja de calculo resolviendo rápidamente el inconveniente, cada animal tiene inicio, diferente números de fechas de control con sus números, y casi todos fecha de final, porque hay algunos que no llegaron al final, entonces tienen inicio, dos controles y cuándo pase el tiempo ... Lo que yo pené es buscar la menor fecha por animal, la mayor fecha por animal, de esta forma tengo la fecha de inicio y final, y luego las fechas que se encuentren entre estas dos. Teniendo estas fechas puedo aplicar la formula que tiene las tres partes inicio, entre controles, final. Claro que todo esto se debe realizar por todo el data.frame y para todos los animales. El resultado final es un número que resume todo lo producido entre la fecha inicial y final (o hasta donde se midió), por cada animal. _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es ___________________________________________________________________________ Aviso: ==== El contenido del presente e-mail y sus posibles adjuntos pertenecen al INTA y pueden contener información confidencial. Si usted no es el destinatario original de este mensaje y por este medio pudo acceder a dicha información, por favor solicitamos contactar al remitente y eliminar el mensaje de inmediato. Se encuentra prohibida la divulgación, copia, distribución o cualquier otro uso de la información contenida en el presente e-mail por parte de personas distintas al destinatario. This e-mail contents and its possible attachments belong to INTA and may contain confidential information. If this message was not originally addressed to you, but you have accessed to such information by this means, please contact the sender and eliminate this message immediately. Circulation, copy, distribution, or any other use of the information contained in this e-mail is not allowed on part of those different from the addressee. Antes de imprimir este mensaje, asegúrese de que sea necesario. Proteger el medio ambiente está también en su mano.
Buenas tardes Javier, La descripción que ofreces es bastante confusa. Quizás un data.frame de lo que tienes y de lo que te gustaría tener podría ayudarnos a ayudarte. Saludos, Jorge Ivan Velez 2009/11/3 Javier Marcuzzi <>> Necesito algo de programación básica para resolver un problema, un > inconveniente es que intente "if", cuándo se lo aplico digamos a x <- 5 no > hay drama, pero si es a leche$litros me dice que solo se toma el primer > elemento. Como pueden ver estoy re perdido. > > Mi problema: los datos están en un data.frame como el siguiente > > animal inicio fin control idlactancias Cle_KilosOrdenie1 > DL > 1 1482 2006-08-08 2007-08-23 2007-02-23 4353 11.4 > 199 days > 2 1482 2004-08-08 2005-05-01 2004-12-21 4351 11.0 > 135 days > 3 1482 2004-08-08 2005-05-01 2005-04-26 4351 11.0 > 261 days > 4 1482 2005-05-02 2006-08-07 2005-05-24 4352 7.8 > 22 days > 5 1482 2006-08-08 2007-08-23 2007-06-25 4353 7.8 > 321 days > 6 1482 2005-05-02 2006-08-07 2005-12-26 4352 7.4 > 238 days > 7 1482 2006-08-08 2007-08-23 2007-01-24 4353 14.8 > 169 days > 8 1482 2006-08-08 2007-08-23 2007-07-24 4353 7.4 > 350 days > 9 1482 2004-08-08 2005-05-01 2004-11-23 4351 16.2 > 107 days > 10 1482 2005-05-02 2006-08-07 2005-07-26 4352 9.0 > 85 days > 11 1482 2006-08-08 2007-08-23 2006-11-20 4353 20.2 > 104 days > 12 1482 2005-05-02 2006-08-07 2005-08-24 4352 9.4 > 114 days > 13 1482 2006-08-08 2007-08-23 2007-04-26 4353 10.2 > 261 days > > > Por cada animal tengo fecha de inicio, fecha de final, y entre estas fechas > de control. En la fecha de inicio y final no hay control, salvo que justo > ese día se realice el control, pero los controles son una vez al mes, por lo > cuál es mucha casualidad. En los controles se realizan mediciones, por lo > cuál hay una fecha y un número asociado a esa fecha. > > La formula matemática es desde el inicio hasta la fecha del primer control, > entre las fechas de controles, y desde la fecha de ultimo control a la fecha > de fin. Los números se multiplican por la diferencia de días entre las > fechas, salvo los dos extremos. > > El problema radica en que los datos no son por ejemplo, inicio, control 1, > control 2, control 3, fin. Pudiendo hacer una hoja de calculo resolviendo > rápidamente el inconveniente, cada animal tiene inicio, diferente números de > fechas de control con sus números, y casi todos fecha de final, porque hay > algunos que no llegaron al final, entonces tienen inicio, dos controles y > cuándo pase el tiempo ... > > Lo que yo pené es buscar la menor fecha por animal, la mayor fecha por > animal, de esta forma tengo la fecha de inicio y final, y luego las fechas > que se encuentren entre estas dos. Teniendo estas fechas puedo aplicar la > formula que tiene las tres partes inicio, entre controles, final. Claro que > todo esto se debe realizar por todo el data.frame y para todos los animales. > El resultado final es un número que resume todo lo producido entre la fecha > inicial y final (o hasta donde se midió), por cada animal. > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Trataré de explicar de otra forma Supongamos que hoy es 1º de enero y hacemos el análisis Tengo por un lado el número de animal, 1,2,3,4 A cada animal le corresponden fechas de inicio, por ejemplo el animal 1 tiene dos fechas de inicio 1º de enero y 1º de diciembre. Cada animal puede o no tener fecha de final, por ejemplo el animal 1 tiene fecha de final el 1º de noviembre, pero aún no tiene fecha de final cuándo la fecha de inicio es 1º de diciembre. Luego de la fecha de inicio 1º de enero vienen las fechas de control y sus valores, 3º marzo 45, 4º de abril 30, 3º septiembre 30. Entonces en un data.frame tengo las columnas animal, fecha de inicio, fecha de final, fecha de control, control. La fórmula del cálculo es días entre la fecha de inicio a fecha del primer control por el valor del control, luego entre a diferencias de días entre los controles, en el ejemplo entre el 3º de marzo y 4º de abril, luego entre 4º de abril y 3º septiembre, y a cada diferencia la multiplico por el promedio de sus valores (45 + 30)/2 para el primer caso. Al final es desde la última fecha de control hasta la fecha de final, o desde el último control hasta el día de análisis (1º de enero). Por lo que dentro del data.frame tengo que detectar para cada animal la diferencia entre la fecha de inicio y la fecha de control, las diferencias de días entre las fechas de controles sucesivas, y detectar la fecha de final, para luego realizar los cálculos de acuerdo a las fechas. Si lo tendría en una planilla de cálculo hacía (A4-C4)*B4+(E4- C4)*((B4+D4)/2)+ +++++ Pero el número de columnas depende y es distinto para cada animal, y los datos no están en columnas, están de esta forma animal inicio fin control idlactancias Cle_KilosOrdenie1 DL 1 1482 2006-08-08 2007-08-23 2007-02-23 4353 11.4 199 days 2 1482 2004-08-08 2005-05-01 2004-12-21 4351 11.0 135 days 3 1482 2004-08-08 2005-05-01 2005-04-26 4351 11.0 261 days
Hola Javier, Coincido con lo confuso de tu email, pero me da que lo que intentas hacer es una comparación elemento a elemento. Si es así yo buscaría en los manuales básicos como subindicar una matriz (recuerda que puedes tratar el data.frame bien como lista o bien como una matriz), otra posible forma es que definas una función que apliques a cada fila o columna y luego utilices las funciones vectoriales de R, por ejemplo APPLY. De todas formas conviene que intentes describir un poco mejor el problema. Un saludo. Fernando Fernández. El 3 de noviembre de 2009 18:16, Jorge Ivan Velez <jorgeivanvelez@gmail.com>escribió:> Buenas tardes Javier, > > La descripción que ofreces es bastante confusa. Quizás un data.frame de lo > que tienes y de lo que te gustaría tener podría ayudarnos a ayudarte. > > Saludos, > Jorge Ivan Velez > > > 2009/11/3 Javier Marcuzzi <> > > > Necesito algo de programación básica para resolver un problema, un > > inconveniente es que intente "if", cuándo se lo aplico digamos a x <- 5 > no > > hay drama, pero si es a leche$litros me dice que solo se toma el primer > > elemento. Como pueden ver estoy re perdido. > > > > Mi problema: los datos están en un data.frame como el siguiente > > > > animal inicio fin control idlactancias Cle_KilosOrdenie1 > > DL > > 1 1482 2006-08-08 2007-08-23 2007-02-23 4353 11.4 > > 199 days > > 2 1482 2004-08-08 2005-05-01 2004-12-21 4351 11.0 > > 135 days > > 3 1482 2004-08-08 2005-05-01 2005-04-26 4351 11.0 > > 261 days > > 4 1482 2005-05-02 2006-08-07 2005-05-24 4352 7.8 > > 22 days > > 5 1482 2006-08-08 2007-08-23 2007-06-25 4353 7.8 > > 321 days > > 6 1482 2005-05-02 2006-08-07 2005-12-26 4352 7.4 > > 238 days > > 7 1482 2006-08-08 2007-08-23 2007-01-24 4353 14.8 > > 169 days > > 8 1482 2006-08-08 2007-08-23 2007-07-24 4353 7.4 > > 350 days > > 9 1482 2004-08-08 2005-05-01 2004-11-23 4351 16.2 > > 107 days > > 10 1482 2005-05-02 2006-08-07 2005-07-26 4352 9.0 > > 85 days > > 11 1482 2006-08-08 2007-08-23 2006-11-20 4353 20.2 > > 104 days > > 12 1482 2005-05-02 2006-08-07 2005-08-24 4352 9.4 > > 114 days > > 13 1482 2006-08-08 2007-08-23 2007-04-26 4353 10.2 > > 261 days > > > > > > Por cada animal tengo fecha de inicio, fecha de final, y entre estas > fechas > > de control. En la fecha de inicio y final no hay control, salvo que justo > > ese día se realice el control, pero los controles son una vez al mes, por > lo > > cuál es mucha casualidad. En los controles se realizan mediciones, por lo > > cuál hay una fecha y un número asociado a esa fecha. > > > > La formula matemática es desde el inicio hasta la fecha del primer > control, > > entre las fechas de controles, y desde la fecha de ultimo control a la > fecha > > de fin. Los números se multiplican por la diferencia de días entre las > > fechas, salvo los dos extremos. > > > > El problema radica en que los datos no son por ejemplo, inicio, control > 1, > > control 2, control 3, fin. Pudiendo hacer una hoja de calculo resolviendo > > rápidamente el inconveniente, cada animal tiene inicio, diferente números > de > > fechas de control con sus números, y casi todos fecha de final, porque > hay > > algunos que no llegaron al final, entonces tienen inicio, dos controles y > > cuándo pase el tiempo ... > > > > Lo que yo pené es buscar la menor fecha por animal, la mayor fecha por > > animal, de esta forma tengo la fecha de inicio y final, y luego las > fechas > > que se encuentren entre estas dos. Teniendo estas fechas puedo aplicar la > > formula que tiene las tres partes inicio, entre controles, final. Claro > que > > todo esto se debe realizar por todo el data.frame y para todos los > animales. > > El resultado final es un número que resume todo lo producido entre la > fecha > > inicial y final (o hasta donde se midió), por cada animal. > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > [[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]]
Esperemos explicar un poco mejor, en el sitio http://www.icar.org/Documents/Rules%20and%20regulations/Guidelines/Guidelines_2009.pdf o buscando en google icar 2.1.4.1 debe salir el método estándar para el cálculo de lactancia, que es la cálculo que quiero aplicar La formula es FY=IoM1+l1*((M1+M2)/2)+((M2+M3)/2)+l(l-1)*(M(n-1)+Mn)/ 2+lnMn Sería mejor que lean el original, esta en pdf y bien explicado, son 14 renglones, más otro tipo de información que les resulte interesante. A los datos para aplicar esta fórmula los tengo en el data.frame que escribí antes. En realidad tengo acceso a la base de datos mysql y la consulta la paso al data.frame, por lo cual hay posibilidades de hacer una consulta a mysql de otra forma en caso de tener que modificar para trabajar de forma más eficiente.> animal inicio fin control idlactancias > Cle_KilosOrdenie1 > > DL > > 1 1482 2006-08-08 2007-08-23 2007-02-23 > 4353 11.4 > > 199 days > > 2 1482 2004-08-08 2005-05-01 2004-12-21 > 4351 11.0Pensé en hacer una matriz, pero el número de filas y/o columnas es distinto para cada vaca, por lo que tendía que leer el data.frama para realizar una matriz de acuerdo a los animales que tienen el mismo número de controles, El 03/11/2009, a las 19:43, Fernando Fernández escribió:> Hola Javier, > > Coincido con lo confuso de tu email, pero me da que lo que intentas > hacer es una comparación elemento a elemento. Si es así yo buscaría > en los manuales básicos como subindicar una matriz (recuerda que > puedes tratar el data.frame bien como lista o bien como una matriz), > otra posible forma es que definas una función que apliques a cada > fila o columna y luego utilices las funciones vectoriales de R, por > ejemplo APPLY. De todas formas conviene que intentes describir un > poco mejor el problema. Un saludo. > > Fernando Fernández. > > El 3 de noviembre de 2009 18:16, Jorge Ivan Velez <jorgeivanvelez@gmail.com > > escribió: > Buenas tardes Javier, > > La descripción que ofreces es bastante confusa. Quizás un data.frame > de lo > que tienes y de lo que te gustaría tener podría ayudarnos a ayudarte. > > Saludos, > Jorge Ivan Velez > > > 2009/11/3 Javier Marcuzzi <> > > > Necesito algo de programación básica para resolver un problema, un > > inconveniente es que intente "if", cuándo se lo aplico digamos a x > <- 5 no > > hay drama, pero si es a leche$litros me dice que solo se toma el > primer > > elemento. Como pueden ver estoy re perdido. > > > > Mi problema: los datos están en un data.frame como el siguiente > > > > animal inicio fin control idlactancias > Cle_KilosOrdenie1 > > DL > > 1 1482 2006-08-08 2007-08-23 2007-02-23 > 4353 11.4 > > 199 days > > 2 1482 2004-08-08 2005-05-01 2004-12-21 > 4351 11.0 > > 135 days > > 3 1482 2004-08-08 2005-05-01 2005-04-26 > 4351 11.0 > > 261 days > > 4 1482 2005-05-02 2006-08-07 2005-05-24 > 4352 7.8 > > 22 days > > 5 1482 2006-08-08 2007-08-23 2007-06-25 > 4353 7.8 > > 321 days > > 6 1482 2005-05-02 2006-08-07 2005-12-26 > 4352 7.4 > > 238 days > > 7 1482 2006-08-08 2007-08-23 2007-01-24 > 4353 14.8 > > 169 days > > 8 1482 2006-08-08 2007-08-23 2007-07-24 > 4353 7.4 > > 350 days > > 9 1482 2004-08-08 2005-05-01 2004-11-23 > 4351 16.2 > > 107 days > > 10 1482 2005-05-02 2006-08-07 2005-07-26 > 4352 9.0 > > 85 days > > 11 1482 2006-08-08 2007-08-23 2006-11-20 > 4353 20.2 > > 104 days > > 12 1482 2005-05-02 2006-08-07 2005-08-24 > 4352 9.4 > > 114 days > > 13 1482 2006-08-08 2007-08-23 2007-04-26 > 4353 10.2 > > 261 days > > > > > > Por cada animal tengo fecha de inicio, fecha de final, y entre > estas fechas > > de control. En la fecha de inicio y final no hay control, salvo > que justo > > ese día se realice el control, pero los controles son una vez al > mes, por lo > > cuál es mucha casualidad. En los controles se realizan mediciones, > por lo > > cuál hay una fecha y un número asociado a esa fecha. > > > > La formula matemática es desde el inicio hasta la fecha del primer > control, > > entre las fechas de controles, y desde la fecha de ultimo control > a la fecha > > de fin. Los números se multiplican por la diferencia de días entre > las > > fechas, salvo los dos extremos. > > > > El problema radica en que los datos no son por ejemplo, inicio, > control 1, > > control 2, control 3, fin. Pudiendo hacer una hoja de calculo > resolviendo > > rápidamente el inconveniente, cada animal tiene inicio, diferente > números de > > fechas de control con sus números, y casi todos fecha de final, > porque hay > > algunos que no llegaron al final, entonces tienen inicio, dos > controles y > > cuándo pase el tiempo ... > > > > Lo que yo pené es buscar la menor fecha por animal, la mayor fecha > por > > animal, de esta forma tengo la fecha de inicio y final, y luego > las fechas > > que se encuentren entre estas dos. Teniendo estas fechas puedo > aplicar la > > formula que tiene las tres partes inicio, entre controles, final. > Claro que > > todo esto se debe realizar por todo el data.frame y para todos los > animales. > > El resultado final es un número que resume todo lo producido entre > la fecha > > inicial y final (o hasta donde se midió), por cada animal. > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > [[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? Creo entender el problema y, aunque no dé peces, voy a ver si puedo ayudarte a construir una caña de pescar. En primer lugar, usando by() adecuadamente, puedes reducir el problema al caso en el que sólo tienes un animal. Deberías, por tanto, crear una función que sepa "procesar un animal". Dentro de dicha función tendrás que realizar ciertas manipulaciones de datos: ordenar temporalmente las observaciones, etc. Podrías crear dos vectores: uno de fechas y otro de pesos. Una manipulación adecuada de los mismos te permitiría obtener tu resultado mediante un producto de uno de los vectores por el otro. El como obtener los vectores es más prolijo que complicado, pero sort, diff y, por supuesto, [], son tus amigos. Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com On Tue, 2009-11-03 at 22:43 +0100, Fernando Fernández wrote:> Hola Javier, > > Coincido con lo confuso de tu email, pero me da que lo que intentas hacer es > una comparacin elemento a elemento. Si es as yo buscara en los manuales > bsicos como subindicar una matriz (recuerda que puedes tratar el data.frame > bien como lista o bien como una matriz), otra posible forma es que definas > una funcin que apliques a cada fila o columna y luego utilices las > funciones vectoriales de R, por ejemplo APPLY. De todas formas conviene que > intentes describir un poco mejor el problema. Un saludo. > > Fernando Fernndez. > > El 3 de noviembre de 2009 18:16, Jorge Ivan Velez > <jorgeivanvelez en gmail.com>escribi: > > > Buenas tardes Javier, > > > > La descripcin que ofreces es bastante confusa. Quizs un data.frame de lo > > que tienes y de lo que te gustara tener podra ayudarnos a ayudarte. > > > > Saludos, > > Jorge Ivan Velez > > > > > > 2009/11/3 Javier Marcuzzi <> > > > > > Necesito algo de programacin bsica para resolver un problema, un > > > inconveniente es que intente "if", cundo se lo aplico digamos a x <- 5 > > no > > > hay drama, pero si es a leche$litros me dice que solo se toma el primer > > > elemento. Como pueden ver estoy re perdido. > > > > > > Mi problema: los datos estn en un data.frame como el siguiente > > > > > > animal inicio fin control idlactancias Cle_KilosOrdenie1 > > > DL > > > 1 1482 2006-08-08 2007-08-23 2007-02-23 4353 11.4 > > > 199 days > > > 2 1482 2004-08-08 2005-05-01 2004-12-21 4351 11.0 > > > 135 days > > > 3 1482 2004-08-08 2005-05-01 2005-04-26 4351 11.0 > > > 261 days > > > 4 1482 2005-05-02 2006-08-07 2005-05-24 4352 7.8 > > > 22 days > > > 5 1482 2006-08-08 2007-08-23 2007-06-25 4353 7.8 > > > 321 days > > > 6 1482 2005-05-02 2006-08-07 2005-12-26 4352 7.4 > > > 238 days > > > 7 1482 2006-08-08 2007-08-23 2007-01-24 4353 14.8 > > > 169 days > > > 8 1482 2006-08-08 2007-08-23 2007-07-24 4353 7.4 > > > 350 days > > > 9 1482 2004-08-08 2005-05-01 2004-11-23 4351 16.2 > > > 107 days > > > 10 1482 2005-05-02 2006-08-07 2005-07-26 4352 9.0 > > > 85 days > > > 11 1482 2006-08-08 2007-08-23 2006-11-20 4353 20.2 > > > 104 days > > > 12 1482 2005-05-02 2006-08-07 2005-08-24 4352 9.4 > > > 114 days > > > 13 1482 2006-08-08 2007-08-23 2007-04-26 4353 10.2 > > > 261 days > > > > > > > > > Por cada animal tengo fecha de inicio, fecha de final, y entre estas > > fechas > > > de control. En la fecha de inicio y final no hay control, salvo que justo > > > ese da se realice el control, pero los controles son una vez al mes, por > > lo > > > cul es mucha casualidad. En los controles se realizan mediciones, por lo > > > cul hay una fecha y un nmero asociado a esa fecha. > > > > > > La formula matemtica es desde el inicio hasta la fecha del primer > > control, > > > entre las fechas de controles, y desde la fecha de ultimo control a la > > fecha > > > de fin. Los nmeros se multiplican por la diferencia de das entre las > > > fechas, salvo los dos extremos. > > > > > > El problema radica en que los datos no son por ejemplo, inicio, control > > 1, > > > control 2, control 3, fin. Pudiendo hacer una hoja de calculo resolviendo > > > rpidamente el inconveniente, cada animal tiene inicio, diferente nmeros > > de > > > fechas de control con sus nmeros, y casi todos fecha de final, porque > > hay > > > algunos que no llegaron al final, entonces tienen inicio, dos controles y > > > cundo pase el tiempo ... > > > > > > Lo que yo pen es buscar la menor fecha por animal, la mayor fecha por > > > animal, de esta forma tengo la fecha de inicio y final, y luego las > > fechas > > > que se encuentren entre estas dos. Teniendo estas fechas puedo aplicar la > > > formula que tiene las tres partes inicio, entre controles, final. Claro > > que > > > todo esto se debe realizar por todo el data.frame y para todos los > > animales. > > > El resultado final es un nmero que resume todo lo producido entre la > > fecha > > > inicial y final (o hasta donde se midi), por cada animal. > > > _______________________________________________ > > > 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]] > > > > > > _______________________________________________ > > 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]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es
colega no se si tu necesidad sea exactamente esta pero en alguna ocasion necesite poner valores dependiendo de el valor de cada reglon de la tabla, esto lo hice usando subindices, hasta donde te entiendo es lo que tu quieres, revisa este ejemplo, espero le entiendas for (i in 1:length(elemento)){ subt=elemento[i] contador=which(tabla$elemento==subt) for (j in (min(contador)):(max(contador))){ tiempo[(j-(min(contador))+1)]=(tabla$tiempo[j]) degradacion[(j-(min(contador))+1)]=(tabla$degradacion[j]) } } basicamente cuando pones [ ] se maneja como un subindice, revisalo y si tienes dudas aqui estamos saludos Enrique RAMOS ________________________________ De: Javier Marcuzzi <javiermarcuzzi@me.com> Para: R-help-es@r-project.org Enviado: mar, noviembre 3, 2009 11:42:31 AM Asunto: [R-es] programación básica Trataré de explicar de otra forma Supongamos que hoy es 1º de enero y hacemos el análisis Tengo por un lado el número de animal, 1,2,3,4 A cada animal le corresponden fechas de inicio, por ejemplo el animal 1 tiene dos fechas de inicio 1º de enero y 1º de diciembre. Cada animal puede o no tener fecha de final, por ejemplo el animal 1 tiene fecha de final el 1º de noviembre, pero aún no tiene fecha de final cuándo la fecha de inicio es 1º de diciembre. Luego de la fecha de inicio 1º de enero vienen las fechas de control y sus valores, 3º marzo 45, 4º de abril 30, 3º septiembre 30. Entonces en un data.frame tengo las columnas animal, fecha de inicio, fecha de final, fecha de control, control. La fórmula del cálculo es días entre la fecha de inicio a fecha del primer control por el valor del control, luego entre a diferencias de días entre los controles, en el ejemplo entre el 3º de marzo y 4º de abril, luego entre 4º de abril y 3º septiembre, y a cada diferencia la multiplico por el promedio de sus valores (45 + 30)/2 para el primer caso. Al final es desde la última fecha de control hasta la fecha de final, o desde el último control hasta el día de análisis (1º de enero). Por lo que dentro del data.frame tengo que detectar para cada animal la diferencia entre la fecha de inicio y la fecha de control, las diferencias de días entre las fechas de controles sucesivas, y detectar la fecha de final, para luego realizar los cálculos de acuerdo a las fechas. Si lo tendría en una planilla de cálculo hacía (A4-C4)*B4+(E4-C4)*((B4+D4)/2)+ +++++ Pero el número de columnas depende y es distinto para cada animal, y los datos no están en columnas, están de esta forma animal inicio fin control idlactancias Cle_KilosOrdenie1 DL 1 1482 2006-08-08 2007-08-23 2007-02-23 4353 11.4 199 days 2 1482 2004-08-08 2005-05-01 2004-12-21 4351 11.0 135 days 3 1482 2004-08-08 2005-05-01 2005-04-26 4351 11.0 261 days _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es __________________________________________________ Correo Yahoo! Espacio para todos tus mensajes, antivirus y antispam ¡gratis! [[alternative HTML version deleted]]
Hola Javier, Puedes probar con SQL, mediante el paquete sqldf (consultas SQL a data.frames en R). No me queda clara la fórmula que propones, así que te mando varios ejemplos de consulta para un data.frame de muestra. Sobre el ejemplo que te envío, ¿que resultado deberíamos obtener? Un cordial saludo, Eduardo San Miguel Martin Consultor BI # R-code farm = data.frame(animal = 1482, inicio = c('2006-08-08', '2004-08-08','2004-08-08'), fin = c('2007-08-23','2005-05-01','2005-05-01'), control = c('2007-02-23','2004-12-21','2005-04-26'), idlactancias = c(4353,4351,4351), Cle_KilosOrdenie1 = c(11.4,11.0,11.0) ); require(sqldf); sqldf(' select * from farm'); sqldf(' select animal, inicio, control, (julianday(control) - julianday(inicio)) dif_dias_periodo from farm group by animal, inicio, control'); sqldf(' select animal, inicio, control, Cle_KilosOrdenie1 * (julianday(control) - julianday(inicio)) kls_periodo from farm group by animal, inicio, control'); sqldf(' select animal, sum(Cle_KilosOrdenie1 * (julianday(control) - julianday(inicio))) kls_periodo from farm group by animal'); sqldf(' select animal, fin, sum(Cle_KilosOrdenie1 * (julianday(control) - julianday(inicio))) kls_periodo from farm group by animal, fin');
miguel.angel.rodriguez.muinos en sergas.es
2009-Nov-04 11:28 UTC
[R-es] programación básica
Hola Eduardo. Estoy de acuerdo contigo. Creo que este asunto tiene más pinta de una tabla/base de datos/dataframe sobre la que realizar ciertas consultas que un mero problema de acceso a filas/columnas de una matriz. Sería interesante saber en qué formato están los datos originales... Un Saludo, Miguel. -----Mensaje original----- De: r-help-es-bounces en r-project.org [mailto:r-help-es-bounces en r-project.org] En nombre de eduardo san miguel Enviado el: miércoles, 04 de noviembre de 2009 12:12 Para: javiermarcuzzi en me.com CC: r-help-es en r-project.org Asunto: Re: [R-es] programación básica Hola Javier, Puedes probar con SQL, mediante el paquete sqldf (consultas SQL a data.frames en R). No me queda clara la fórmula que propones, así que te mando varios ejemplos de consulta para un data.frame de muestra. Sobre el ejemplo que te envío, ¿que resultado deberíamos obtener? Un cordial saludo, Eduardo San Miguel Martin Consultor BI Nota: A información contida nesta mensaxe e os seus posibles documentos adxuntos é privada e confidencial e está dirixida únicamente ó seu destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, por favor elimínea. A distribución ou copia desta mensaxe non está autorizada. Nota: La información contenida en este mensaje y sus posibles documentos adjuntos es privada y confidencial y está dirigida únicamente a su destinatario/a. Si usted no es el/la destinatario/a original de este mensaje, por favor elimínelo. La distribución o copia de este mensaje no está autorizada. See more languages: http://www.sergas.es/aviso_confidencialidad.htm