Hola, Me llamo Pablo, estudiante avanzado de la Licenciatura en Estadistica, me faltan 3 materias que las doy la semana que viene y termino la carrera. Trabajo en Red Link S.A. en el sector de Prevencion de Fraudes. En Red Link no se tenia ningun software estadistico cuando ingrese (6 meses aprox.) asi que empeze a incursionar en R sabiendo que era libre y me encontre con una fantastica herramienta. Previamente trabaje en el INDEC en el area de Metodologia, me especializaba en el muestreo. Alli aprendi a manejar soft como Stata, SPSS y SAS. Pero R es bastante distinto a estos programas por lo que lucho un poco mas cada vez que me propongo algo. Creo que esta lista de mail va a ser muy productiva. Actualmente me encuentro tratando de tratando de crear unas variables. Expongo un pequeño dataset http://imgur.com/xH46g<http://www.linkedin.com/redirect?url=http%3A%2F%2Fimgur%2Ecom%2FxH46g&urlhash=XxFq&_t=tracking_anet> Las dos variables del final son las que quiero y pude hacer mediante un paquete "plyr". Mediante la sentencia ddply(datos, 1:2, transform, cumsum(Importe)) Pero lo cierto es que estoy tratando ahora de hacer la variable trx_hora, que cuente las transacciones de los ultimos 60 minutos y no he logrado hacerla. Si alguien puede ayudarme bienvenido sea! Abrazo Pablo A. Guzzi guzzipa@gmail.com [[alternative HTML version deleted]]
Estimado Pablo No se si entendí coloca en r: ## something similar in the current locale format(Sys.time(), "%a %b %d %H:%M:%S %Y") # necesitas a esa fecha restarle 60 minutos, y buscar todos los que están en el rango entra ambos valores # o los últimos 60 minutos de movimientos con la tarjeta a partir del último registro ingresado Javier Marcuzzi -----Mensaje original----- From: Pablo Andres Guzzi Sent: Wednesday, November 28, 2012 11:04 AM To: r-help-es en r-project.org Subject: [R-es] Hola, soy Pablo. Hola, Me llamo Pablo, estudiante avanzado de la Licenciatura en Estadistica, me faltan 3 materias que las doy la semana que viene y termino la carrera. Trabajo en Red Link S.A. en el sector de Prevencion de Fraudes. En Red Link no se tenia ningun software estadistico cuando ingrese (6 meses aprox.) asi que empeze a incursionar en R sabiendo que era libre y me encontre con una fantastica herramienta. Previamente trabaje en el INDEC en el area de Metodologia, me especializaba en el muestreo. Alli aprendi a manejar soft como Stata, SPSS y SAS. Pero R es bastante distinto a estos programas por lo que lucho un poco mas cada vez que me propongo algo. Creo que esta lista de mail va a ser muy productiva. Actualmente me encuentro tratando de tratando de crear unas variables. Expongo un pequeño dataset http://imgur.com/xH46g<http://www.linkedin.com/redirect?url=http%3A%2F%2Fimgur%2Ecom%2FxH46g&urlhash=XxFq&_t=tracking_anet> Las dos variables del final son las que quiero y pude hacer mediante un paquete "plyr". Mediante la sentencia ddply(datos, 1:2, transform, cumsum(Importe)) Pero lo cierto es que estoy tratando ahora de hacer la variable trx_hora, que cuente las transacciones de los ultimos 60 minutos y no he logrado hacerla. Si alguien puede ayudarme bienvenido sea! Abrazo Pablo A. Guzzi guzzipa en gmail.com [[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
Pablo, Si lo que quieres es un sub-total rolling de los últimos 60 minutos te recomiendo, si no conoces, los paquetes xts y zoo. En particular empezaría por la función ?rollapply de zoo. Daniel Merino El día 28 de noviembre de 2012 11:04, Pablo Andres Guzzi <guzzipa en gmail.com> escribió:> Hola, > Me llamo Pablo, estudiante avanzado de la Licenciatura en Estadistica, me > faltan 3 materias que las doy la semana que viene y termino la carrera. Trabajo > en Red Link S.A. en el sector de Prevencion de Fraudes. En Red Link no se > tenia ningun software estadistico cuando ingrese (6 meses aprox.) asi que > empeze a incursionar en R sabiendo que era libre y me encontre con una > fantastica herramienta. > > Previamente trabaje en el INDEC en el area de Metodologia, me > especializaba en el muestreo. Alli aprendi a manejar soft como Stata, SPSS > y SAS. Pero R es bastante distinto a estos programas por lo que lucho un > poco mas cada vez que me propongo algo. > > Creo que esta lista de mail va a ser muy productiva. > > Actualmente me encuentro tratando de tratando de crear unas variables. > Expongo un pequeño dataset > > http://imgur.com/xH46g<http://www.linkedin.com/redirect?url=http%3A%2F%2Fimgur%2Ecom%2FxH46g&urlhash=XxFq&_t=tracking_anet> > > Las dos variables del final son las que quiero y pude hacer mediante un > paquete "plyr". Mediante la sentencia > > ddply(datos, 1:2, transform, cumsum(Importe)) > > Pero lo cierto es que estoy tratando ahora de hacer la variable trx_hora, > que cuente las transacciones de los ultimos 60 minutos y no he logrado > hacerla. > > Si alguien puede ayudarme bienvenido sea! > > > > Abrazo > > Pablo A. Guzzi > guzzipa en gmail.com > > [[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 >-- Daniel
Daniel, ya me pongo a investigar el paquete zoo y mas precisamente el comando rollappl. Javier, Necesito los movimientos de los ultimos 60 minutos segun la fecha de la transaccion. Si la transaccion tiene fecha de realizacion 28/11/2012 a las 12:00:00 necesito que la variable en cuestion cuente las trx realizadas desde las 11:00:00 hasta las 12:00:00 del 28/11/2012 Abrazo Pablo A. Guzzi guzzipa@gmail.com El 28 de noviembre de 2012 11:18, Usuario R <r.user.spain@gmail.com>escribió:> Hola Pablo, > > Soy Patricia la administradora de la lista. Bienvenido y muchas gracias > por tu email. > > Quería también hacerte una pregunta, estas buscando trabajo? Yo soy > también licenciada en estadística y vivo en Berlin. Me mandan muchisimas > ofertas de trabajo y te podría pasar algunas, si estas interesado. Todas > las ofertas son para Alemania, sobretodo Berlin. > > Bueno, espero que la lista te ayude con tus dudas, un abrazo. > > Patricia > > > > > > El 28 de noviembre de 2012 15:04, Pablo Andres Guzzi <guzzipa@gmail.com>escribió: > >> Pablo A. Guzzi > > > > > -- > Patricia García González > > >[[alternative HTML version deleted]]
Estimado Pablo Entonces su problema tiene algo parecido a algo que me paso, en esta lista, había que buscarlo, me pasaron varias posibilidades de trabajo, en mi caso eran días, pero en R la unidad de tiempo se cuenta a partir de una fecha fija y creo que en segundos, en mi caso varias alternativas fallaron, o daban resultados que al leerlos estaban bien, pero como yo conocía el valor real, encontré algunos errores de R, ni idea el porqué (incluso copiado de libro), pero la solución en mi caso es striptime(), r-project se actualizó, mejoro, etc., pero una vez que tengo un código qua anda prefiero no tocarlo. Le recomiendo que pruebe con pocos datos, según su versión de R, sistema operativo, datos, etc. No confíe en los resultados hasta leer varios originales, algún cálculo mental o con lápiz, y si está acorde continuar, el trabajo con fechas por ahí da trabajo, aunque si todo anda bien es rapidísimo. El resto, intente la ayuda de Daniel, si se presentan inconvenientes entre todos buscaremos alguna forma, pero sería recomendable intercambiar códigos de R para ser precisos. Javier Marcuzzi From: Pablo Andres Guzzi Sent: Wednesday, November 28, 2012 12:05 PM To: javier.ruben.marcuzzi ; daniel319 Cc: r-help-es Subject: Re: [R-es] Hola, soy Pablo. Daniel, ya me pongo a investigar el paquete zoo y mas precisamente el comando rollappl. Javier, Necesito los movimientos de los ultimos 60 minutos segun la fecha de la transaccion. Si la transaccion tiene fecha de realizacion 28/11/2012 a las 12:00:00 necesito que la variable en cuestion cuente las trx realizadas desde las 11:00:00 hasta las 12:00:00 del 28/11/2012 Abrazo Pablo A. Guzzi guzzipa@gmail.com El 28 de noviembre de 2012 11:18, Usuario R <r.user.spain@gmail.com> escribió: Hola Pablo, Soy Patricia la administradora de la lista. Bienvenido y muchas gracias por tu email. Quería también hacerte una pregunta, estas buscando trabajo? Yo soy también licenciada en estadística y vivo en Berlin. Me mandan muchisimas ofertas de trabajo y te podría pasar algunas, si estas interesado. Todas las ofertas son para Alemania, sobretodo Berlin. Bueno, espero que la lista te ayude con tus dudas, un abrazo. Patricia El 28 de noviembre de 2012 15:04, Pablo Andres Guzzi <guzzipa@gmail.com> escribió: Pablo A. Guzzi -- Patricia García González [[alternative HTML version deleted]]
Bueno finalmente lo resolvi... de la siguiente manera ------------------------------------------------------------------------ ------------------------ datos <- read.csv("C:/datos.csv") datos ## estado inicial del data frame n <- nrow(datos) datos$Fecha<-as.Date(datos$Fecha, format=''%d/%m/%Y'') datos$hora<-substring(datos$Hora, 1, 2) datos$min<-substring(datos$Hora, 4, 5) datos$seg<-substring(datos$Hora, 7, 8) datos$tiempo<-as.numeric(datos$Fecha)*24*60*60 + as.numeric(datos$hora)*60*60 + as.numeric(datos$min)*60 + as.numeric(datos$seg) for (i in 1:n) { intervalo <- 60*60 #en segundos tarj <- datos$Tarjeta[i] t.i <- as.numeric(datos$tiempo[i]) t.ini <- t.i-intervalo t.fin <- t.i #me quedo con las trx de la tarjeta temp<-subset(datos,datos$Tarjeta==tarj ) #me quedo con las trx en el intervalo que me interesa temp2<-subset(temp, tiempo >= t.ini & tiempo <= t.fin) #hago la operacion que me interesa - en este caso sumo el importe monto_hs_temp<-sum(temp2$Importe) #asigno la operacion realizada al registro correspondiente datos$montohs[i]<-monto_hs_temp rm(temp) rm(temp2) rm(monto_hs_temp) } datos ##estado final del dataframe ------------------------------------------------------------------------ ------------------------ anda perfecto! lo que no se, es si se puede optimizar para que ande mas rapido, no es lento con pocos datos. Pero no lo probe con 100000 transacciones todas juntas. Despues les comento como funciona en datos masivos. Abrazo Pablo A. Guzzi guzzipa@gmail.com El 28 de noviembre de 2012 13:05, Marcuzzi, Javier Rubén < javier.ruben.marcuzzi@gmail.com> escribió:> Estimado Pablo > > Entonces su problema tiene algo parecido a algo que me paso, en esta > lista, había que buscarlo, me pasaron varias posibilidades de trabajo, en > mi caso eran días, pero en R la unidad de tiempo se cuenta a partir de una > fecha fija y creo que en segundos, en mi caso varias alternativas fallaron, > o daban resultados que al leerlos estaban bien, pero como yo conocía el > valor real, encontré algunos errores de R, ni idea el porqué (incluso > copiado de libro), pero la solución en mi caso es striptime(), r-project se > actualizó, mejoro, etc., pero una vez que tengo un código qua anda prefiero > no tocarlo. > > Le recomiendo que pruebe con pocos datos, según su versión de R, sistema > operativo, datos, etc. No confíe en los resultados hasta leer varios > originales, algún cálculo mental o con lápiz, y si está acorde continuar, > el trabajo con fechas por ahí da trabajo, aunque si todo anda bien es > rapidísimo. > > El resto, intente la ayuda de Daniel, si se presentan inconvenientes entre > todos buscaremos alguna forma, pero sería recomendable intercambiar códigos > de R para ser precisos. > > Javier Marcuzzi > > *From:* Pablo Andres Guzzi <guzzipa@gmail.com> > *Sent:* Wednesday, November 28, 2012 12:05 PM > *To:* javier.ruben.marcuzzi <javier.ruben.marcuzzi@gmail.com> ; daniel319<daniel319@gmail.com> > *Cc:* r-help-es <r-help-es@r-project.org> > *Subject:* Re: [R-es] Hola, soy Pablo. > > Daniel, ya me pongo a investigar el paquete zoo y mas precisamente el > comando rollappl. > > Javier, Necesito los movimientos de los ultimos 60 minutos segun la fecha > de la transaccion. Si la transaccion tiene fecha de realizacion 28/11/2012 > a las 12:00:00 necesito que la variable en cuestion cuente las trx > realizadas desde las 11:00:00 hasta las 12:00:00 del 28/11/2012 > > > > Abrazo > > Pablo A. Guzzi > guzzipa@gmail.com > > > > > El 28 de noviembre de 2012 11:18, Usuario R <r.user.spain@gmail.com>escribió: > >> Hola Pablo, >> >> Soy Patricia la administradora de la lista. Bienvenido y muchas gracias >> por tu email. >> >> Quería también hacerte una pregunta, estas buscando trabajo? Yo soy >> también licenciada en estadística y vivo en Berlin. Me mandan muchisimas >> ofertas de trabajo y te podría pasar algunas, si estas interesado. Todas >> las ofertas son para Alemania, sobretodo Berlin. >> >> Bueno, espero que la lista te ayude con tus dudas, un abrazo. >> >> Patricia >> >> >> >> >> >> El 28 de noviembre de 2012 15:04, Pablo Andres Guzzi <guzzipa@gmail.com>escribió: >> >>> Pablo A. Guzzi >> >> >> >> >> -- >> Patricia García González >> >> >> >[[alternative HTML version deleted]]
Hola, Hay algunos detalles que se pueden optimizar ya mismo y otros que los apunto a la espera de poder tener algunos datos (si es posible) para proponer la solución definitiva. *A) Mejoras inmediatas:* intervalo <- 3600 # esta variable la saco fuera del bucle ya evaluada es fija. for (i in 1:n) { tarj <- datos$Tarjeta[i] t.i <- datos$tiempo[i] #Evito hacer la conversión as.numeric. Cuando defines tiempo (más arriba en el código, ya era todo t.ini <- t.i-intervalo t.fin <- t.i #me quedo con las trx de la tarjeta temp<-subset(datos,datos$Tarjeta==tarj ) #me quedo con las trx en el intervalo que me interesa temp2<-subset(temp, tiempo >= t.ini & tiempo <= t.fin) #hago la operacion que me interesa - en este caso sumo el importe monto_hs_temp<-sum(temp2$Importe) #asigno la operacion realizada al registro correspondiente datos$montohs[i]<-monto_hs_temp rm(temp) rm(temp2) rm(monto_hs_temp) } B) Mejoras pendientes de datos para confirmar el código intervalo <- 3600 # esta variable la saco fuera del bucle ya evaluada es fija. library(sqldf) for (i in 1:n) { tarj <- datos$Tarjeta[i] t.i <- datos$tiempo[i] #Evito hacer la conversión as.numeric. Cuando defines tiempo (más arriba en el código, ya era todo t.ini <- t.i-intervalo t.fin <- t.i #me quedo con las trx de la tarjeta #temp<-subset(datos,datos$Tarjeta==tarj ) #me quedo con las trx en el intervalo que me interesa #temp2<-subset(temp, tiempo >= t.ini & tiempo <= t.fin) #hago la operacion que me interesa - en este caso sumo el importe #monto_hs_temp<-sum(temp2$Importe) ## Todo lo anterior se puede ejecutar de una sola vez con la función sqldf() del paquete "sqldf" # la función tendría esta pinta: monto_hs_temp <- fn$sqldf(" *sum(Importe) from datos * * where Tarjeta = ''$tarj'' and * * tiempo between $t.ini and $t.fin " *) #asigno la operación realizada al registro correspondiente datos$montohs[i]<-monto_hs_temp rm(temp) rm(temp2) rm(monto_hs_temp) } Saludos, Carlos Ortega www.qualityexcellence.es El 29 de noviembre de 2012 15:17, Pablo Andres Guzzi <guzzipa@gmail.com>escribió:> Bueno finalmente lo resolvi... > de la siguiente manera > > > > > ------------------------------------------------------------------------ > ------------------------ > datos <- read.csv("C:/datos.csv") > > datos ## estado inicial del data frame > > n <- nrow(datos) > > datos$Fecha<-as.Date(datos$Fecha, format=''%d/%m/%Y'') > datos$hora<-substring(datos$Hora, 1, 2) > datos$min<-substring(datos$Hora, 4, 5) > datos$seg<-substring(datos$Hora, 7, 8) > > datos$tiempo<-as.numeric(datos$Fecha)*24*60*60 + > as.numeric(datos$hora)*60*60 + as.numeric(datos$min)*60 + > as.numeric(datos$seg) > > for (i in 1:n) { > intervalo <- 60*60 #en segundos > tarj <- datos$Tarjeta[i] > t.i <- as.numeric(datos$tiempo[i]) > t.ini <- t.i-intervalo > t.fin <- t.i > > #me quedo con las trx de la tarjeta > temp<-subset(datos,datos$Tarjeta==tarj ) > #me quedo con las trx en el intervalo que me interesa > temp2<-subset(temp, tiempo >= t.ini & tiempo <= t.fin) > > #hago la operacion que me interesa - en este caso sumo el importe > monto_hs_temp<-sum(temp2$Importe) > > #asigno la operacion realizada al registro correspondiente > datos$montohs[i]<-monto_hs_temp > > rm(temp) > rm(temp2) > rm(monto_hs_temp) > } > > datos ##estado final del dataframe > > ------------------------------------------------------------------------ > ------------------------ > > anda perfecto! > lo que no se, es si se puede optimizar para que ande mas rapido, no es > lento con pocos datos. Pero no lo probe con 100000 transacciones todas > juntas. Despues les comento como funciona en datos masivos. > > > Abrazo > > Pablo A. Guzzi > guzzipa@gmail.com > > > > > El 28 de noviembre de 2012 13:05, Marcuzzi, Javier Rubén < > javier.ruben.marcuzzi@gmail.com> escribió: > > > Estimado Pablo > > > > Entonces su problema tiene algo parecido a algo que me paso, en esta > > lista, había que buscarlo, me pasaron varias posibilidades de trabajo, en > > mi caso eran días, pero en R la unidad de tiempo se cuenta a partir de > una > > fecha fija y creo que en segundos, en mi caso varias alternativas > fallaron, > > o daban resultados que al leerlos estaban bien, pero como yo conocía el > > valor real, encontré algunos errores de R, ni idea el porqué (incluso > > copiado de libro), pero la solución en mi caso es striptime(), r-project > se > > actualizó, mejoro, etc., pero una vez que tengo un código qua anda > prefiero > > no tocarlo. > > > > Le recomiendo que pruebe con pocos datos, según su versión de R, sistema > > operativo, datos, etc. No confíe en los resultados hasta leer varios > > originales, algún cálculo mental o con lápiz, y si está acorde continuar, > > el trabajo con fechas por ahí da trabajo, aunque si todo anda bien es > > rapidísimo. > > > > El resto, intente la ayuda de Daniel, si se presentan inconvenientes > entre > > todos buscaremos alguna forma, pero sería recomendable intercambiar > códigos > > de R para ser precisos. > > > > Javier Marcuzzi > > > > *From:* Pablo Andres Guzzi <guzzipa@gmail.com> > > *Sent:* Wednesday, November 28, 2012 12:05 PM > > *To:* javier.ruben.marcuzzi <javier.ruben.marcuzzi@gmail.com> ; > daniel319<daniel319@gmail.com> > > *Cc:* r-help-es <r-help-es@r-project.org> > > *Subject:* Re: [R-es] Hola, soy Pablo. > > > > Daniel, ya me pongo a investigar el paquete zoo y mas precisamente el > > comando rollappl. > > > > Javier, Necesito los movimientos de los ultimos 60 minutos segun la fecha > > de la transaccion. Si la transaccion tiene fecha de realizacion > 28/11/2012 > > a las 12:00:00 necesito que la variable en cuestion cuente las trx > > realizadas desde las 11:00:00 hasta las 12:00:00 del 28/11/2012 > > > > > > > > Abrazo > > > > Pablo A. Guzzi > > guzzipa@gmail.com > > > > > > > > > > El 28 de noviembre de 2012 11:18, Usuario R <r.user.spain@gmail.com > >escribió: > > > >> Hola Pablo, > >> > >> Soy Patricia la administradora de la lista. Bienvenido y muchas gracias > >> por tu email. > >> > >> Quería también hacerte una pregunta, estas buscando trabajo? Yo soy > >> también licenciada en estadística y vivo en Berlin. Me mandan muchisimas > >> ofertas de trabajo y te podría pasar algunas, si estas interesado. Todas > >> las ofertas son para Alemania, sobretodo Berlin. > >> > >> Bueno, espero que la lista te ayude con tus dudas, un abrazo. > >> > >> Patricia > >> > >> > >> > >> > >> > >> El 28 de noviembre de 2012 15:04, Pablo Andres Guzzi <guzzipa@gmail.com > >escribió: > >> > >>> Pablo A. Guzzi > >> > >> > >> > >> > >> -- > >> Patricia García González > >> > >> > >> > > > > [[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]]
Perfecto . Las correcciones inmediatas ya estan... con la otra tuve problemas ________________________________________________________________________ datos <- read.csv("C:/datos.csv") datos ## estado inicial del data frame n <- nrow(datos) datos$Fecha<-as.Date(datos$Fecha, format=''%d/%m/%Y'') datos$hora<-substring(datos$Hora, 1, 2) datos$min<-substring(datos$Hora, 4, 5) datos$seg<-substring(datos$Hora, 7, 8) datos$tiempo<-as.numeric(datos$Fecha)*24*60*60 + as.numeric(datos$hora)*60*60 + as.numeric(datos$min)*60 + as.numeric(datos$seg) for (i in 1:n) { intervalo <- 60*60 #en segundos tarj <- datos$Tarjeta[i] t.i <- as.numeric(datos$tiempo[i]) t_ini <- t.i-intervalo t_fin <- t.i monto_hs_temp <- sqldf(" select sum(Importe) from datos where Tarjeta = $tarj and tiempo between $t_ini and $t_fin" ) datos$montohs[i]<-monto_hs_temp rm(monto_hs_temp) } ________________________________________________________________________________ arroja el siguiente error Error en sqliteExecStatement(con, statement, bind.data) : RS-DBI driver: (error in statement: no such table: datos)Además: Mensajes de aviso perdidosIn value[[3L]](cond) : RAW() can only be applied to a ''raw'', not a ''character'' Abrazo Pablo A. Guzzi guzzipa@gmail.com El 29 de noviembre de 2012 12:16, Carlos Ortega <cof@qualityexcellence.es>escribió:> Hola, > > Hay algunos detalles que se pueden optimizar ya mismo y otros que los > apunto a la espera de poder tener algunos datos (si es posible) para > proponer la solución definitiva. > > *A) Mejoras inmediatas:* > > intervalo <- 3600 # esta variable la saco fuera del bucle ya evaluada es > fija. > for (i in 1:n) { > tarj <- datos$Tarjeta[i] > t.i <- datos$tiempo[i] #Evito hacer la conversión as.numeric. > Cuando defines tiempo (más arriba en el código, ya era todo > t.ini <- t.i-intervalo > t.fin <- t.i > > #me quedo con las trx de la tarjeta > temp<-subset(datos,datos$Tarjeta==tarj ) > #me quedo con las trx en el intervalo que me interesa > temp2<-subset(temp, tiempo >= t.ini & tiempo <= t.fin) > > #hago la operacion que me interesa - en este caso sumo el importe > monto_hs_temp<-sum(temp2$Importe) > > #asigno la operacion realizada al registro correspondiente > datos$montohs[i]<-monto_hs_temp > > rm(temp) > rm(temp2) > rm(monto_hs_temp) > } > > B) Mejoras pendientes de datos para confirmar el código > > > intervalo <- 3600 # esta variable la saco fuera del bucle ya evaluada es > fija. > library(sqldf) > for (i in 1:n) { > tarj <- datos$Tarjeta[i] > t.i <- datos$tiempo[i] #Evito hacer la conversión as.numeric. > Cuando defines tiempo (más arriba en el código, ya era todo > > t.ini <- t.i-intervalo > t.fin <- t.i > > #me quedo con las trx de la tarjeta > #temp<-subset(datos,datos$Tarjeta==tarj ) > > #me quedo con las trx en el intervalo que me interesa > #temp2<-subset(temp, tiempo >= t.ini & tiempo <= t.fin) > #hago la operacion que me interesa - en este caso sumo el importe > > #monto_hs_temp<-sum(temp2$Importe) > > ## Todo lo anterior se puede ejecutar de una sola vez con la función > sqldf() del paquete "sqldf" > # la función tendría esta pinta: > monto_hs_temp <- fn$sqldf(" *sum(Importe) from datos * > * where Tarjeta = ''$tarj'' > and * > * tiempo between $t.ini > and $t.fin " *) > > #asigno la operación realizada al registro correspondiente > > datos$montohs[i]<-monto_hs_temp > > rm(temp) > rm(temp2) > rm(monto_hs_temp) > } > > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > El 29 de noviembre de 2012 15:17, Pablo Andres Guzzi <guzzipa@gmail.com>escribió: > >> Bueno finalmente lo resolvi... >> de la siguiente manera >> >> >> >> >> ------------------------------------------------------------------------ >> ------------------------ >> datos <- read.csv("C:/datos.csv") >> >> datos ## estado inicial del data frame >> >> n <- nrow(datos) >> >> datos$Fecha<-as.Date(datos$Fecha, format=''%d/%m/%Y'') >> datos$hora<-substring(datos$Hora, 1, 2) >> datos$min<-substring(datos$Hora, 4, 5) >> datos$seg<-substring(datos$Hora, 7, 8) >> >> datos$tiempo<-as.numeric(datos$Fecha)*24*60*60 + >> as.numeric(datos$hora)*60*60 + as.numeric(datos$min)*60 + >> as.numeric(datos$seg) >> >> for (i in 1:n) { >> intervalo <- 60*60 #en segundos >> tarj <- datos$Tarjeta[i] >> t.i <- as.numeric(datos$tiempo[i]) >> t.ini <- t.i-intervalo >> t.fin <- t.i >> >> #me quedo con las trx de la tarjeta >> temp<-subset(datos,datos$Tarjeta==tarj ) >> #me quedo con las trx en el intervalo que me interesa >> temp2<-subset(temp, tiempo >= t.ini & tiempo <= t.fin) >> >> #hago la operacion que me interesa - en este caso sumo el importe >> monto_hs_temp<-sum(temp2$Importe) >> >> #asigno la operacion realizada al registro correspondiente >> datos$montohs[i]<-monto_hs_temp >> >> rm(temp) >> rm(temp2) >> rm(monto_hs_temp) >> } >> >> datos ##estado final del dataframe >> >> ------------------------------------------------------------------------ >> ------------------------ >> >> anda perfecto! >> lo que no se, es si se puede optimizar para que ande mas rapido, no es >> lento con pocos datos. Pero no lo probe con 100000 transacciones todas >> juntas. Despues les comento como funciona en datos masivos. >> >> >> Abrazo >> >> Pablo A. Guzzi >> guzzipa@gmail.com >> >> >> >> >> El 28 de noviembre de 2012 13:05, Marcuzzi, Javier Rubén < >> javier.ruben.marcuzzi@gmail.com> escribió: >> >> > Estimado Pablo >> > >> > Entonces su problema tiene algo parecido a algo que me paso, en esta >> > lista, había que buscarlo, me pasaron varias posibilidades de trabajo, >> en >> > mi caso eran días, pero en R la unidad de tiempo se cuenta a partir de >> una >> > fecha fija y creo que en segundos, en mi caso varias alternativas >> fallaron, >> > o daban resultados que al leerlos estaban bien, pero como yo conocía el >> > valor real, encontré algunos errores de R, ni idea el porqué (incluso >> > copiado de libro), pero la solución en mi caso es striptime(), >> r-project se >> > actualizó, mejoro, etc., pero una vez que tengo un código qua anda >> prefiero >> > no tocarlo. >> > >> > Le recomiendo que pruebe con pocos datos, según su versión de R, sistema >> > operativo, datos, etc. No confíe en los resultados hasta leer varios >> > originales, algún cálculo mental o con lápiz, y si está acorde >> continuar, >> > el trabajo con fechas por ahí da trabajo, aunque si todo anda bien es >> > rapidísimo. >> > >> > El resto, intente la ayuda de Daniel, si se presentan inconvenientes >> entre >> > todos buscaremos alguna forma, pero sería recomendable intercambiar >> códigos >> > de R para ser precisos. >> > >> > Javier Marcuzzi >> > >> > *From:* Pablo Andres Guzzi <guzzipa@gmail.com> >> > *Sent:* Wednesday, November 28, 2012 12:05 PM >> > *To:* javier.ruben.marcuzzi <javier.ruben.marcuzzi@gmail.com> ; >> daniel319<daniel319@gmail.com> >> > *Cc:* r-help-es <r-help-es@r-project.org> >> > *Subject:* Re: [R-es] Hola, soy Pablo. >> > >> > Daniel, ya me pongo a investigar el paquete zoo y mas precisamente el >> > comando rollappl. >> > >> > Javier, Necesito los movimientos de los ultimos 60 minutos segun la >> fecha >> > de la transaccion. Si la transaccion tiene fecha de realizacion >> 28/11/2012 >> > a las 12:00:00 necesito que la variable en cuestion cuente las trx >> > realizadas desde las 11:00:00 hasta las 12:00:00 del 28/11/2012 >> > >> > >> > >> > Abrazo >> > >> > Pablo A. Guzzi >> > guzzipa@gmail.com >> > >> > >> > >> > >> > El 28 de noviembre de 2012 11:18, Usuario R <r.user.spain@gmail.com >> >escribió: >> > >> >> Hola Pablo, >> >> >> >> Soy Patricia la administradora de la lista. Bienvenido y muchas gracias >> >> por tu email. >> >> >> >> Quería también hacerte una pregunta, estas buscando trabajo? Yo soy >> >> también licenciada en estadística y vivo en Berlin. Me mandan >> muchisimas >> >> ofertas de trabajo y te podría pasar algunas, si estas interesado. >> Todas >> >> las ofertas son para Alemania, sobretodo Berlin. >> >> >> >> Bueno, espero que la lista te ayude con tus dudas, un abrazo. >> >> >> >> Patricia >> >> >> >> >> >> >> >> >> >> >> >> El 28 de noviembre de 2012 15:04, Pablo Andres Guzzi < >> guzzipa@gmail.com>escribió: >> >> >> >>> Pablo A. Guzzi >> >> >> >> >> >> >> >> >> >> -- >> >> Patricia García González >> >> >> >> >> >> >> > >> >> [[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]]
Hola, Comentaba que mejor que adjuntaras parte de tus datos para comprobar que todo funcionaba. Como estás pasando variables a la consulta SQL, hay que poner comillas alrededor de las variable de texto. Mejor esto: ########################################### intervalo <- 3600 for (i in 1:n) { tarj <- datos$Tarjeta[i] t.i <- datos$tiempo[i] t_ini <- t.i-intervalo t_fin <- t.i monto_hs_temp <- sqldf( paste("select sum(Importe) from datos where Tarjeta = ", tarj, "and tiempo between ", t_ini, " and ", $t_fin, sep="") ) datos$montohs[i]<-monto_hs_temp rm(monto_hs_temp) } ######################################### En el caso de que no llegue a funcionar, ¿me puedes enviar una parte de tus datos para comprobar el detalle de lo que falla? Saludos, Carlos Ortega www.qualityexcellence.es El 29 de noviembre de 2012 18:28, Pablo Andres Guzzi <guzzipa@gmail.com>escribió:> Perfecto . Las correcciones inmediatas ya estan... > > con la otra tuve problemas > > ________________________________________________________________________ > > datos <- read.csv("C:/datos.csv") > > datos ## estado inicial del data frame > > n <- nrow(datos) > > datos$Fecha<-as.Date(datos$Fecha, format=''%d/%m/%Y'') > datos$hora<-substring(datos$Hora, 1, 2) > datos$min<-substring(datos$Hora, 4, 5) > datos$seg<-substring(datos$Hora, 7, 8) > > datos$tiempo<-as.numeric(datos$Fecha)*24*60*60 + > as.numeric(datos$hora)*60*60 + as.numeric(datos$min)*60 + > as.numeric(datos$seg) > > for (i in 1:n) { > intervalo <- 60*60 #en segundos > tarj <- datos$Tarjeta[i] > t.i <- as.numeric(datos$tiempo[i]) > t_ini <- t.i-intervalo > t_fin <- t.i > > monto_hs_temp <- sqldf(" select sum(Importe) > > from datos > where Tarjeta = $tarj > and tiempo between $t_ini and $t_fin" > ) > > datos$montohs[i]<-monto_hs_temp > > rm(monto_hs_temp) > } > > ________________________________________________________________________________ > > arroja el siguiente error > > Error en sqliteExecStatement(con, statement, bind.data) : > RS-DBI driver: (error in statement: no such table: datos)Además: Mensajes de aviso perdidosIn value[[3L]](cond) : > RAW() can only be applied to a ''raw'', not a ''character'' > > > > > > Abrazo > > Pablo A. Guzzi > guzzipa@gmail.com > > > > > El 29 de noviembre de 2012 12:16, Carlos Ortega <cof@qualityexcellence.es>escribió: > > Hola, >> >> Hay algunos detalles que se pueden optimizar ya mismo y otros que los >> apunto a la espera de poder tener algunos datos (si es posible) para >> proponer la solución definitiva. >> >> *A) Mejoras inmediatas:* >> >> intervalo <- 3600 # esta variable la saco fuera del bucle ya evaluada es >> fija. >> for (i in 1:n) { >> tarj <- datos$Tarjeta[i] >> t.i <- datos$tiempo[i] #Evito hacer la conversión as.numeric. >> Cuando defines tiempo (más arriba en el código, ya era todo >> t.ini <- t.i-intervalo >> t.fin <- t.i >> >> #me quedo con las trx de la tarjeta >> temp<-subset(datos,datos$Tarjeta==tarj ) >> #me quedo con las trx en el intervalo que me interesa >> temp2<-subset(temp, tiempo >= t.ini & tiempo <= t.fin) >> >> #hago la operacion que me interesa - en este caso sumo el importe >> monto_hs_temp<-sum(temp2$Importe) >> >> #asigno la operacion realizada al registro correspondiente >> datos$montohs[i]<-monto_hs_temp >> >> rm(temp) >> rm(temp2) >> rm(monto_hs_temp) >> } >> >> B) Mejoras pendientes de datos para confirmar el código >> >> >> intervalo <- 3600 # esta variable la saco fuera del bucle ya evaluada es >> fija. >> library(sqldf) >> for (i in 1:n) { >> tarj <- datos$Tarjeta[i] >> t.i <- datos$tiempo[i] #Evito hacer la conversión as.numeric. >> Cuando defines tiempo (más arriba en el código, ya era todo >> >> t.ini <- t.i-intervalo >> t.fin <- t.i >> >> #me quedo con las trx de la tarjeta >> #temp<-subset(datos,datos$Tarjeta==tarj ) >> >> #me quedo con las trx en el intervalo que me interesa >> #temp2<-subset(temp, tiempo >= t.ini & tiempo <= t.fin) >> #hago la operacion que me interesa - en este caso sumo el importe >> >> #monto_hs_temp<-sum(temp2$Importe) >> >> ## Todo lo anterior se puede ejecutar de una sola vez con la función >> sqldf() del paquete "sqldf" >> # la función tendría esta pinta: >> monto_hs_temp <- fn$sqldf(" *sum(Importe) from datos * >> * where Tarjeta >> ''$tarj'' and * >> * tiempo between $t.ini >> and $t.fin " *) >> >> #asigno la operación realizada al registro correspondiente >> >> datos$montohs[i]<-monto_hs_temp >> >> rm(temp) >> rm(temp2) >> rm(monto_hs_temp) >> } >> >> >> >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es >> >> >> El 29 de noviembre de 2012 15:17, Pablo Andres Guzzi <guzzipa@gmail.com>escribió: >> >>> Bueno finalmente lo resolvi... >>> de la siguiente manera >>> >>> >>> >>> >>> ------------------------------------------------------------------------ >>> ------------------------ >>> datos <- read.csv("C:/datos.csv") >>> >>> datos ## estado inicial del data frame >>> >>> n <- nrow(datos) >>> >>> datos$Fecha<-as.Date(datos$Fecha, format=''%d/%m/%Y'') >>> datos$hora<-substring(datos$Hora, 1, 2) >>> datos$min<-substring(datos$Hora, 4, 5) >>> datos$seg<-substring(datos$Hora, 7, 8) >>> >>> datos$tiempo<-as.numeric(datos$Fecha)*24*60*60 + >>> as.numeric(datos$hora)*60*60 + as.numeric(datos$min)*60 + >>> as.numeric(datos$seg) >>> >>> for (i in 1:n) { >>> intervalo <- 60*60 #en segundos >>> tarj <- datos$Tarjeta[i] >>> t.i <- as.numeric(datos$tiempo[i]) >>> t.ini <- t.i-intervalo >>> t.fin <- t.i >>> >>> #me quedo con las trx de la tarjeta >>> temp<-subset(datos,datos$Tarjeta==tarj ) >>> #me quedo con las trx en el intervalo que me interesa >>> temp2<-subset(temp, tiempo >= t.ini & tiempo <= t.fin) >>> >>> #hago la operacion que me interesa - en este caso sumo el importe >>> monto_hs_temp<-sum(temp2$Importe) >>> >>> #asigno la operacion realizada al registro correspondiente >>> datos$montohs[i]<-monto_hs_temp >>> >>> rm(temp) >>> rm(temp2) >>> rm(monto_hs_temp) >>> } >>> >>> datos ##estado final del dataframe >>> >>> ------------------------------------------------------------------------ >>> ------------------------ >>> >>> anda perfecto! >>> lo que no se, es si se puede optimizar para que ande mas rapido, no es >>> lento con pocos datos. Pero no lo probe con 100000 transacciones todas >>> juntas. Despues les comento como funciona en datos masivos. >>> >>> >>> Abrazo >>> >>> Pablo A. Guzzi >>> guzzipa@gmail.com >>> >>> >>> >>> >>> El 28 de noviembre de 2012 13:05, Marcuzzi, Javier Rubén < >>> javier.ruben.marcuzzi@gmail.com> escribió: >>> >>> > Estimado Pablo >>> > >>> > Entonces su problema tiene algo parecido a algo que me paso, en esta >>> > lista, había que buscarlo, me pasaron varias posibilidades de trabajo, >>> en >>> > mi caso eran días, pero en R la unidad de tiempo se cuenta a partir de >>> una >>> > fecha fija y creo que en segundos, en mi caso varias alternativas >>> fallaron, >>> > o daban resultados que al leerlos estaban bien, pero como yo conocía el >>> > valor real, encontré algunos errores de R, ni idea el porqué (incluso >>> > copiado de libro), pero la solución en mi caso es striptime(), >>> r-project se >>> > actualizó, mejoro, etc., pero una vez que tengo un código qua anda >>> prefiero >>> > no tocarlo. >>> > >>> > Le recomiendo que pruebe con pocos datos, según su versión de R, >>> sistema >>> > operativo, datos, etc. No confíe en los resultados hasta leer varios >>> > originales, algún cálculo mental o con lápiz, y si está acorde >>> continuar, >>> > el trabajo con fechas por ahí da trabajo, aunque si todo anda bien es >>> > rapidísimo. >>> > >>> > El resto, intente la ayuda de Daniel, si se presentan inconvenientes >>> entre >>> > todos buscaremos alguna forma, pero sería recomendable intercambiar >>> códigos >>> > de R para ser precisos. >>> > >>> > Javier Marcuzzi >>> > >>> > *From:* Pablo Andres Guzzi <guzzipa@gmail.com> >>> > *Sent:* Wednesday, November 28, 2012 12:05 PM >>> > *To:* javier.ruben.marcuzzi <javier.ruben.marcuzzi@gmail.com> ; >>> daniel319<daniel319@gmail.com> >>> > *Cc:* r-help-es <r-help-es@r-project.org> >>> > *Subject:* Re: [R-es] Hola, soy Pablo. >>> > >>> > Daniel, ya me pongo a investigar el paquete zoo y mas precisamente el >>> > comando rollappl. >>> > >>> > Javier, Necesito los movimientos de los ultimos 60 minutos segun la >>> fecha >>> > de la transaccion. Si la transaccion tiene fecha de realizacion >>> 28/11/2012 >>> > a las 12:00:00 necesito que la variable en cuestion cuente las trx >>> > realizadas desde las 11:00:00 hasta las 12:00:00 del 28/11/2012 >>> > >>> > >>> > >>> > Abrazo >>> > >>> > Pablo A. Guzzi >>> > guzzipa@gmail.com >>> > >>> > >>> > >>> > >>> > El 28 de noviembre de 2012 11:18, Usuario R <r.user.spain@gmail.com >>> >escribió: >>> > >>> >> Hola Pablo, >>> >> >>> >> Soy Patricia la administradora de la lista. Bienvenido y muchas >>> gracias >>> >> por tu email. >>> >> >>> >> Quería también hacerte una pregunta, estas buscando trabajo? Yo soy >>> >> también licenciada en estadística y vivo en Berlin. Me mandan >>> muchisimas >>> >> ofertas de trabajo y te podría pasar algunas, si estas interesado. >>> Todas >>> >> las ofertas son para Alemania, sobretodo Berlin. >>> >> >>> >> Bueno, espero que la lista te ayude con tus dudas, un abrazo. >>> >> >>> >> Patricia >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> El 28 de noviembre de 2012 15:04, Pablo Andres Guzzi < >>> guzzipa@gmail.com>escribió: >>> >> >>> >>> Pablo A. Guzzi >>> >> >>> >> >>> >> >>> >> >>> >> -- >>> >> Patricia García González >>> >> >>> >> >>> >> >>> > >>> >>> [[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 >> > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]