[R-es] Pasar cotización en pesos a dólares usando tipo cambio día hábil anterior

Sebastian Kruk residuo.solow en gmail.com
Mar Oct 17 13:27:24 CEST 2017


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



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