Foro de debate

Solución sin bucles

Solución sin bucles

by Roberto Caride -
Number of replies: 5
Hola a todos.

Necesito vuestra ayuda.

Tengo un data.frame con más de 100.000 filas y 31 variables.


Precios
x1 x2 x3 x...31
y1 1.3465 1.3464 1.3471 1.3466
y...+100000 1.3443 1.3446 1.3451 1.3442
Necesito hacer que Precios[y1,x1]= Precios [y1,x2 - x1]. Por ejemplo Preciostemp[1,1]= 1.3464-1.3465 = -1.

Pero el problema es que lo tengo que hacer si bucles, ahora mismo lo tengo con bucles y es inviable.

Nota:sólo necesito las 30 primera variables de cada fila, alimento la fila con 31 para poder calcular el número 30.


Un saludo y muchas gracias.



In reply to Roberto Caride

Re: Solución sin bucles

by Manuel Muñoz Márquez -

Buenas:

Si no he entendido mal lo que quieres es restar las dos primeras columnas:

Precios$x1 = Precios$x2 - Precios$x1

Un saludo.

In reply to Manuel Muñoz Márquez

Re: Solución sin bucles

by Roberto Caride -

Perdón por tardar en responder.

Necesitaba que cada registro sea el posterior menos el mismo.

Adjunto la solución, no es perfecta pero he pasado de muchas horas de procesamiento a no más de 3 segundos. El bucle lo hace sólo por cada variable, en mi caso 30 veces, y apply se lleva las filas más de 100.000.

# preparado es mi dataset 

#Normalizar preparado

testFunc <- function(a, b) (b - a)
m<-1
n<-2
normalizado <- NULL


for(i in 1:30){ normalizado<- rbind(normalizado,(t((apply(preparado[,(m:n)], 1, function(y) testFunc(y[1],y[2]))))))
m<-m+1
n<-n+1

Muchas gracias por contestar.

Un saludo.

Roberto

In reply to Roberto Caride

Re: Solución sin bucles

by Manuel Muñoz Márquez -

Buenas:

No entiendo muy bien lo que intentas hacer. Tal vez si pones un ejemplo con datos concretos.

Si lo que quieres es calcular cada fila menos la anterior basta con

Diffx2x1 = Precios$x1[-nrow(Precios)] - Precios$x1[-1]

Un saludo.

In reply to Manuel Muñoz Márquez

Re: Solución sin bucles

by Roberto Caride -

Gracias por el interés.

Patrones Forex

In reply to Roberto Caride

Re: Solución sin bucles

by Manuel Muñoz Márquez -

Hola:

No he pillado como pasas de 1 a 2.

De 2 a 4 es muy fácil, si m es una matriz (o un data.frame) con los precios como en 2, puedes hacer:

 m <- diag(5)
> m
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    0    1    0    0    0
[3,]    0    0    1    0    0
[4,]    0    0    0    1    0
[5,]    0    0    0    0    1
> m[,-1] - m[,-ncol(m)]
     [,1] [,2] [,3] [,4]
[1,]   -1    0    0    0
[2,]    1   -1    0    0
[3,]    0    1   -1    0
[4,]    0    0    1   -1
[5,]    0    0    0    1

Sólo faltaría multiplicar el resultado por 10000.

Un saludo.