[R-es] Eliminar for de multiplicación de matriz

Carlos Ortega cof en qualityexcellence.es
Lun Ago 15 21:13:31 CEST 2016


Hola,

Puedes hacerlo con data.table, salvo el detalle del "if".
Suponiendo que tu data.frame es de esta forma:

tu_df <- data.frame(
                                hrs_trab = ... ,
                                coste_hr = ....,
                                deuda     =....,
                                periodo   =
                             )

Mencionas hacer una agrupación por "período" pero no lo incluyes en tu
bucle.
Dependiendo del tipo de este periodo si es una fecha, mes, semana, etc.
habría que detallarlo un poco más.
Pero con esa estructura con data.table es bastante inmediato:

library(data.table
tu_dt <- as.data.table(tu_df)
tu_dt[ , Ingreso := hrs_trab * coste_hr - deuda, by="periodo"]


Y para el "if", lo que haces en el bucle es sumar 1000 unidades cuando el
valor es negativo.
No sé si te valdría si al final del cálculo del data.table anterior, al
valor negativo de "Ingreso" le sumaras las 1000 unidades de esta forma:

tu_dt$Ingreso <- ifelse(tu_dt$Ingreso < 0 , tu_dt$Ingreso + 1000,
tu_dt$Ingreso)

Para acertar algo más a la primera, convendría que para este tipo de casos,
incluyeras una parte de la matriz/data.frame con el que trabajas...


Saludos,
Carlos Ortega
www.qualityexcellence.es

El 14 de agosto de 2016, 14:00, Sebastián Kruk <residuo.solow en gmail.com>
escribió:

> Estimados usuarios de R:
>
> Yo tengo una matriz en que cada fila es una persona y las filas
> corresponden al ingreso, horas trabajadas, salario por hora  y deudas.
>
> El ingreso es igual a las horas trabajadas por el salario por hora menos
> deudas.
>
> Me interesa guardar por individuo por cada período el ingreso.
>
> Yo hacía:
>
> for t in 2:200 {
>  for i in 1 in 1:10 {
>   M[i,Y]=M[i,S]*M[i,H]-M[i,D]+M[i,Y]
>   if M[i,Y]<1000 {
>    M[i,D] = 1000 + M[i,D]
>    }
>   }
>  Ing[t]=M[,Y]
>  }
>
> En lo anterior Y es ingreso, H son las horas trabajadas, S es el salario y
> D las deudas.
>
> ¿Hay alguna forma de optimizarlo eliminando los for y el if?
>
> Desde ya muchas gracias.
>
> Sebastián.
>         [[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