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 <c...@qualityexcellence.es> To: Sebastián Kruk <residuo.so...@gmail.com> Cc: Lista R <r-help-es@r-project.org> Subject: Re: [R-es] Eliminar for de multiplicación de matriz Message-ID: <caokbq8io+n6rx9geh09dft86cbbu-yfpkesayr0mfaiqxsu...@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-requ...@r-project.org> escribió: > Envíe los mensajes para la lista R-help-es a > r-help-es@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-requ...@r-project.org > > Puede contactar con el responsable de la lista escribiendo a: > r-help-es-ow...@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.marcu...@gmail.com) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Mon, 15 Aug 2016 21:13:31 +0200 > From: Carlos Ortega <c...@qualityexcellence.es> > To: Sebastián Kruk <residuo.so...@gmail.com> > Cc: Lista R <r-help-es@r-project.org> > Subject: Re: [R-es] Eliminar for de multiplicación de matriz > Message-ID: > <CAOKbq8io+n6rX9GEH09dfT86cBBU-yFPkESAYR0MfAiqXSUPkg@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.so...@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@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 <boanergesa...@gmail.com> > To: r-help-es@r-project.org > Subject: [R-es] inscrición > Message-ID: > <CA++h-ueHMDNApy8uazgZQP9NT+ffKpekLs8UR_GDL2QDyxwy8Q@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.marcu...@gmail.com> > To: Boanerge salas muñoz <boanergesa...@gmail.com>, > "r-help-es@r-project.org" <r-help-es@r-project.org> > Subject: Re: [R-es] inscrición > Message-ID: <57b22a83.2d3ced0a.7e847.4...@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@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]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es