Carlos Ortega
2017-Oct-14 22:45 UTC
[R-es] Pasar cotización en pesos a dólares usando tipo cambio día hábil anterior
Los NAs de los fines de semana los puedes completar usando alguna de estas funciones, que seguro que irán más rápidas que usar bucles... --------- https://stackoverflow.com/questions/7735647/replacing-nas-with-latest-non-na-value There are a bunch of packages offering na.locf (NA Last Observation Carried Forward) functions: - xts - xts::na.locf - zoo - zoo::na.locf - imputeTS - imputeTS::na.locf - spacetime - spacetime::na.locf And also other packages where this function is named differently. --------- Es esta página encontrarás algunas otras funciones que mejoran el rendimiento de éstas. Gracias, Carlos Ortega www.qualityexcellence.es El 14 de octubre de 2017, 23:02, Xavier-Andoni Tibau Alberdi < xavitibau en gmail.com> escribió:> Buenas, > > Vigila que solo nos lo has enviado a unos pocos y no a todos los miembros > de la lista. Te lo comento porque queda registrado y puede ser util para > otras personas. > > En tu caso yo lo que haria es: > 1. unir ambos data frames de forma asimetrica, por la fecha. Puedes > hacerlo con el comando ful_join() o left_join() de dplyr. > 2. Quando todo este unido en un data frame con las columans, Dia precio y > TC (solo habrá TC en algunos dias, en los fines de semana será NA), haces > un bucle para rellenar una nueva columna que te dira el cambio. El bucle > que tienes que usar es doble, por un ladoo for, i por el otro while. > Con el for, iremos pasando fila por fila para seleccionar el valor a > rellenar. Así que haremos una i por cada fila. El bucle preguntara, si el > valor TC de la fila i no es NA "!is.na(datos[i, "TC"]). En caso > afirmativo calculamos el cambio de ese dia. En caso negativo creamos una > variable temporal m i la ponemos igual a i-1. A continuacion haces un > while, cuya causa sea que la columna TC de la fila m no sea nulo. Si sigue > siendo nulo, entonces restas uno a m, si no es nulo, continuas, i calculas > el cambio de la fila i con el valor de cambio de la fila m. > > Espero que se entienda. Hay otras formas. Personalmente haria una funcion > y la aplicaria pero creo que es una forma de facil comprensión que te > permite hacer lo que dices facilmente. > > Por cierto, el while sirve para asegurarte que si hay mas de dos dias de > fiesta, no de error solo con el for. > > Un saludo, > > Xavier Tibau > > 2017-10-14 21:12 GMT+02:00 Sebastian Kruk <residuo.solow en gmail.com>: > >> Estimados Usuarios-R: >> >> >> >> Muy buenas tardes. >> >> >> >> Tengo un listado de precios en pesos por día: >> >> >> >> Día Precio en $ >> >> 01/01/04 0,04 >> >> 02/01/04 0,11 >> >> 03/01/04 0,11 >> >> 04/01/04 0,04 >> >> 05/01/04 0,10 >> >> 06/01/04 0,00 >> >> 07/01/04 0,10 >> >> 08/01/04 0,10 >> >> 09/01/04 0,14 >> >> 10/01/04 0,21 >> >> 11/01/04 0,21 >> >> 12/01/04 0,21 >> >> 13/01/04 0,21 >> >> 14/01/04 0,21 >> >> 15/01/04 0,21 >> >> 16/01/04 0,21 >> >> 17/01/04 0,27 >> >> 18/01/04 0,27 >> >> 19/01/04 0,27 >> >> 20/01/04 0,23 >> >> 21/01/04 0,23 >> >> 22/01/04 0,23 >> >> 23/01/04 0,27 >> >> 24/01/04 0,27 >> >> 25/01/04 0,27 >> >> 26/01/04 0,27 >> >> 27/01/04 0,27 >> >> 28/01/04 0,28 >> >> 29/01/04 0,27 >> >> 30/01/04 0,27 >> >> 31/01/04 0,27 >> >> >> >> Lo quiero pasar a dólares usando las cotizaciones pero solo tengo de los >> días hábiles: >> >> >> >> Día >> >> TC >> >> 29/12/03 >> >> 29,3400 >> >> 02/01/04 >> >> 29,0900 >> >> 05/01/04 >> >> 29,0900 >> >> 07/01/04 >> >> 29,2400 >> >> 08/01/04 >> >> 29,4400 >> >> 09/01/04 >> >> 29,4400 >> >> 12/01/04 >> >> 29,4400 >> >> 13/01/04 >> >> 29,4900 >> >> 14/01/04 >> >> 29,4400 >> >> 15/01/04 >> >> 29,4400 >> >> 16/01/04 >> >> 29,4400 >> >> 19/01/04 >> >> 29,4900 >> >> 20/01/04 >> >> 29,5400 >> >> 21/01/04 >> >> 29,5400 >> >> 22/01/04 >> >> 29,5400 >> >> 23/01/04 >> >> 29,4800 >> >> 26/01/04 >> >> 29,3800 >> >> 27/01/04 >> >> 29,4800 >> >> 28/01/04 >> >> 29,4300 >> >> 29/01/04 >> >> 29,4350 >> >> 30/01/04 >> >> 29,4350 >> >> >> >> En este ejemplo el precio 0.04 del 01/01/04 lo tendría que dividir entre >> el TC 29.34 del 29/12/03 dado que a fin de año se mantuvo la cotización del >> ultimo día hábil. >> >> >> >> Para los precios del 3 y 4 de enero de 2004 usaría el TC del 2 de enero. >> >> >> >> En principio haría un merge por la fecha, ¿cómo hago con los otros casos >> de días no laborables? >> >> >> >> Saludos, >> >> >> >> Sebastián. >> >> >> >> Enviado desde Correo <https://go.microsoft.com/fwlink/?LinkId=550986> >> para Windows 10 >> >> >> >> *De: *Xavi tibau alberdi <xavitibau en gmail.com> >> *Enviado: *sábado, 14 de octubre de 2017 4:30 >> *Para: *Sebastian Kruk <residuo.solow en gmail.com> >> *Asunto: *Re: [R-es] convertir numeric que tiene como nombres la fecha >> en ts >> >> >> >> Genial! >> >> >> >> Cualquier otra duda, ya sabes. >> >> >> >> Un saludo, >> >> >> >> Xavier Tibau >> >> >> >> 2017-10-14 9:28 GMT+02:00 Sebastian Kruk <residuo.solow en gmail.com>: >> >> Si, Xavi. >> >> >> >> El rowname es la fecha. >> >> >> >> Saludos, >> >> >> >> Sebastian. >> >> >> >> Enviado desde Correo <https://go.microsoft.com/fwlink/?LinkId=550986> >> para Windows 10 >> >> >> >> *De: *Xavi tibau alberdi <xavitibau en gmail.com> >> *Enviado: *sábado, 14 de octubre de 2017 4:26 >> *Para: *Sebastian Kruk <residuo.solow en gmail.com> >> *Asunto: *Re: [R-es] convertir numeric que tiene como nombres la fecha >> en ts >> >> >> >> Buenas, >> >> >> >> Te refieres a que el rowname es una fecha? >> >> >> >> Sí así és, lo que tienes que hacer es poner los nombres en una variable. >> i luego a ts. Algo como: >> >> >> >> timeSeries <- ts(rowname(tu_vector)) >> >> >> >> Si no es esto a lo que te referies, indicanos que quieres decir por >> nombre de observación. >> >> >> >> Un saludo, >> >> >> >> Xavier Tibau >> >> >> >> 2017-10-14 6:57 GMT+02:00 Sebastian Kruk <residuo.solow en gmail.com>: >> >> Estimados listeros: >> >> Tengo un vector numérico en que el nombre de cada observación corresponde >> a >> una fecha. >> >> ¿Puedo convertirlo en una vector ts? >> >> Saludos, >> >> Sebas. >> >> [[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 >> >> >> >> >> >> >> >> >> > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Sebastian Kruk
2017-Oct-17 11:27 UTC
[R-es] Pasar cotización en pesos a dólares usando tipo cambio día hábil anterior
Hola Carlos. Opté por usar la función de la librería xts. Supuse que sería más rapida que un bucle desarrolado por mi. Saludos, Sebastián. Enviado desde Correo para Windows 10 De: Carlos Ortega Enviado: sábado, 14 de octubre de 2017 19:45 Para: Sebastian Kruk CC: Xavier-Andoni Tibau Alberdi; Lista R Asunto: Re: Pasar cotización en pesos a dólares usando tipo cambio día hábil anterior Los NAs de los fines de semana los puedes completar usando alguna de estas funciones, que seguro que irán más rápidas que usar bucles... --------- https://stackoverflow.com/questions/7735647/replacing-nas-with-latest-non-na-value There are a bunch of packages offering na.locf (NA Last Observation Carried Forward) functions: ? xts - xts::na.locf ? zoo - zoo::na.locf ? imputeTS - imputeTS::na.locf ? spacetime - spacetime::na.locf And also other packages where this function is named differently. --------- Es esta página encontrarás algunas otras funciones que mejoran el rendimiento de éstas. Gracias, Carlos Ortega www.qualityexcellence.es El 14 de octubre de 2017, 23:02, Xavier-Andoni Tibau Alberdi <xavitibau en gmail.com> escribió: Buenas, Vigila que solo nos lo has enviado a unos pocos y no a todos los miembros de la lista. Te lo comento porque queda registrado y puede ser util para otras personas. En tu caso yo lo que haria es: 1. unir ambos data frames de forma asimetrica, por la fecha. Puedes hacerlo con el comando ful_join() o left_join() de dplyr. 2. Quando todo este unido en un data frame con las columans, Dia precio y TC (solo habrá TC en algunos dias, en los fines de semana será NA), haces un bucle para rellenar una nueva columna que te dira el cambio. El bucle que tienes que usar es doble, por un ladoo for, i por el otro while. Con el for, iremos pasando fila por fila para seleccionar el valor a rellenar. Así que haremos una i por cada fila. El bucle preguntara, si el valor TC de la fila i no es NA "!is.na(datos[i, "TC"]). En caso afirmativo calculamos el cambio de ese dia. En caso negativo creamos una variable temporal m i la ponemos igual a i-1. A continuacion haces un while, cuya causa sea que la columna TC de la fila m no sea nulo. Si sigue siendo nulo, entonces restas uno a m, si no es nulo, continuas, i calculas el cambio de la fila i con el valor de cambio de la fila m. Espero que se entienda. Hay otras formas. Personalmente haria una funcion y la aplicaria pero creo que es una forma de facil comprensión que te permite hacer lo que dices facilmente. Por cierto, el while sirve para asegurarte que si hay mas de dos dias de fiesta, no de error solo con el for. Un saludo, Xavier Tibau 2017-10-14 21:12 GMT+02:00 Sebastian Kruk <residuo.solow en gmail.com>: Estimados Usuarios-R: Muy buenas tardes. Tengo un listado de precios en pesos por día: Día Precio en $ 01/01/04 0,04 02/01/04 0,11 03/01/04 0,11 04/01/04 0,04 05/01/04 0,10 06/01/04 0,00 07/01/04 0,10 08/01/04 0,10 09/01/04 0,14 10/01/04 0,21 11/01/04 0,21 12/01/04 0,21 13/01/04 0,21 14/01/04 0,21 15/01/04 0,21 16/01/04 0,21 17/01/04 0,27 18/01/04 0,27 19/01/04 0,27 20/01/04 0,23 21/01/04 0,23 22/01/04 0,23 23/01/04 0,27 24/01/04 0,27 25/01/04 0,27 26/01/04 0,27 27/01/04 0,27 28/01/04 0,28 29/01/04 0,27 30/01/04 0,27 31/01/04 0,27 Lo quiero pasar a dólares usando las cotizaciones pero solo tengo de los días hábiles: Día TC 29/12/03 29,3400 02/01/04 29,0900 05/01/04 29,0900 07/01/04 29,2400 08/01/04 29,4400 09/01/04 29,4400 12/01/04 29,4400 13/01/04 29,4900 14/01/04 29,4400 15/01/04 29,4400 16/01/04 29,4400 19/01/04 29,4900 20/01/04 29,5400 21/01/04 29,5400 22/01/04 29,5400 23/01/04 29,4800 26/01/04 29,3800 27/01/04 29,4800 28/01/04 29,4300 29/01/04 29,4350 30/01/04 29,4350 En este ejemplo el precio 0.04 del 01/01/04 lo tendría que dividir entre el TC 29.34 del 29/12/03 dado que a fin de año se mantuvo la cotización del ultimo día hábil. Para los precios del 3 y 4 de enero de 2004 usaría el TC del 2 de enero. En principio haría un merge por la fecha, ¿cómo hago con los otros casos de días no laborables? Saludos, Sebastián. Enviado desde Correo para Windows 10 De: Xavi tibau alberdi Enviado: sábado, 14 de octubre de 2017 4:30 Para: Sebastian Kruk Asunto: Re: [R-es] convertir numeric que tiene como nombres la fecha en ts Genial! Cualquier otra duda, ya sabes. Un saludo, Xavier Tibau 2017-10-14 9:28 GMT+02:00 Sebastian Kruk <residuo.solow en gmail.com>: Si, Xavi. El rowname es la fecha. Saludos, Sebastian. Enviado desde Correo para Windows 10 De: Xavi tibau alberdi Enviado: sábado, 14 de octubre de 2017 4:26 Para: Sebastian Kruk Asunto: Re: [R-es] convertir numeric que tiene como nombres la fecha en ts Buenas, Te refieres a que el rowname es una fecha? Sí así és, lo que tienes que hacer es poner los nombres en una variable. i luego a ts. Algo como: timeSeries <- ts(rowname(tu_vector)) Si no es esto a lo que te referies, indicanos que quieres decir por nombre de observación. Un saludo, Xavier Tibau 2017-10-14 6:57 GMT+02:00 Sebastian Kruk <residuo.solow en gmail.com>: Estimados listeros: Tengo un vector numérico en que el nombre de cada observación corresponde a una fecha. ¿Puedo convertirlo en una vector ts? Saludos, Sebas. [[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 -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]