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 
<[email protected]> 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 <[email protected]>:
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 <[email protected]>:
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 <[email protected]>:
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
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es
 
 
 
 





-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es


        [[alternative HTML version deleted]]

_______________________________________________
R-help-es mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es

Responder a