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

Sebastian Kruk residuo.solow en gmail.com
Jue Ago 18 15:42:50 CEST 2016


Hola Carlos.
Lo que pasa es que yo parto de la situación inicial y con esos datos voy
generando los datos en forma encadenada.
En verdad el script que mandé está simplificado.
Cada individuo le pide prestado en cada período al individuo de mayores
ingresos y el de mayores ingresos incrementa sus ingresos por las deudas de
los demás individuos.
Espero si el otro mail que mande con el nuevo script se entienda más.
Saludos,
Sebastián.
----------------------------------------------------------------------

Message: 1
Date: Mon, 15 Aug 2016 21:13:31 +0200
From: Carlos Ortega <cof en qualityexcellence.es>
To: Sebastián Kruk <residuo.solow en gmail.com>
Cc: Lista R <r-help-es en r-project.org>
Subject: Re: [R-es] Eliminar for de multiplicación de matriz
Message-ID:
        <CAOKbq8io+n6rX9GEH09dfT86cBBU-yFPkESAYR0MfAiqXSUPkg en mail.gmail.com>
Content-Type: text/plain; charset="UTF-8"

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 16 de agosto de 2016, 07:00, <r-help-es-request en r-project.org> escribió:

> Envíe los mensajes para la lista R-help-es a
>         r-help-es en r-project.org
>
> Para subscribirse o anular su subscripción a través de la WEB
>         https://stat.ethz.ch/mailman/listinfo/r-help-es
>
> O por correo electrónico, enviando un mensaje con el texto "help" en
> el asunto (subject) o en el cuerpo a:
>         r-help-es-request en r-project.org
>
> Puede contactar con el responsable de la lista escribiendo a:
>         r-help-es-owner en r-project.org
>
> Si responde a algún contenido de este mensaje, por favor, edite la
> linea del asunto (subject) para que el texto sea mas especifico que:
> "Re: Contents of R-help-es digest...". Además, por favor, incluya en
> la respuesta sólo aquellas partes del mensaje a las que está
> respondiendo.
>
>
> Asuntos del día:
>
>    1. Re: Eliminar for de multiplicación de matriz (Carlos Ortega)
>    2. inscrición (Boanerge salas muñoz)
>    3. Re: inscrición (javier.ruben.marcuzzi en gmail.com)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Mon, 15 Aug 2016 21:13:31 +0200
> From: Carlos Ortega <cof en qualityexcellence.es>
> To: Sebastián Kruk <residuo.solow en gmail.com>
> Cc: Lista R <r-help-es en r-project.org>
> Subject: Re: [R-es] Eliminar for de multiplicación de matriz
> Message-ID:
>         <CAOKbq8io+n6rX9GEH09dfT86cBBU-yFPkESAYR0MfAiqXSUPkg en mail.
> gmail.com>
> Content-Type: text/plain; charset="UTF-8"
>
> 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]]
>
>
>
> ------------------------------
>
> Message: 2
> Date: Mon, 15 Aug 2016 15:26:58 -0500
> From: Boanerge salas muñoz <boanergesalas en gmail.com>
> To: r-help-es en r-project.org
> Subject: [R-es] inscrición
> Message-ID:
>         <CA++h-ueHMDNApy8uazgZQP9NT+ffKpekLs8UR_GDL2QDyxwy8Q en mail.
> gmail.com>
> Content-Type: text/plain; charset="UTF-8"
>
> Cordial saludo, deseo inscribirme
>
> --
> Boanerge salas muñoz
>
> 3014738660
>
>         [[alternative HTML version deleted]]
>
>
>
> ------------------------------
>
> Message: 3
> Date: Mon, 15 Aug 2016 17:48:03 -0300
> From: <javier.ruben.marcuzzi en gmail.com>
> To: Boanerge salas muñoz <boanergesalas en gmail.com>,
>         "r-help-es en r-project.org" <r-help-es en r-project.org>
> Subject: Re: [R-es] inscrición
> Message-ID: <57b22a83.2d3ced0a.7e847.4396 en mx.google.com>
> Content-Type: text/plain; charset="UTF-8"
>
> Estimado Boanerge Salas Muñoz
>
> Su mensaje sale en la lista de R-es, si usted deseaba inscribirse ya está
> en la lista.
>
> Javier Rubén Marcuzzi
>
> De: Boanerge salas muñoz
>         [[alternative HTML version deleted]]
>
>
>
> ------------------------------
>
> Subject: Pié de página del digest
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
> ------------------------------
>
> Fin de Resumen de R-help-es, Vol 90, Envío 18
> *********************************************
>

	[[alternative HTML version deleted]]



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