[R-es] Hola, soy Pablo.
Pablo Andres Guzzi
guzzipa en gmail.com
Jue Nov 29 19:49:14 CET 2012
intente hacerlo andar pero hay algo que estoy omitiendo evidentemente
(adjunto csv)
######################################
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)
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)
}
######################################
Abrazo
Pablo A. Guzzi
guzzipa en gmail.com
El 29 de noviembre de 2012 15:30, Carlos Ortega
<cof en qualityexcellence.es>escribió:
> 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 en 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 en gmail.com
>>
>>
>>
>>
>> El 29 de noviembre de 2012 12:16, Carlos Ortega <cof en 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 en 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 en gmail.com
>>>>
>>>>
>>>>
>>>>
>>>> El 28 de noviembre de 2012 13:05, Marcuzzi, Javier Rubén <
>>>> javier.ruben.marcuzzi en 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 en gmail.com>
>>>> > *Sent:* Wednesday, November 28, 2012 12:05 PM
>>>> > *To:* javier.ruben.marcuzzi <javier.ruben.marcuzzi en gmail.com> ;
>>>> daniel319<daniel319 en gmail.com>
>>>> > *Cc:* r-help-es <r-help-es en 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 en gmail.com
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > El 28 de noviembre de 2012 11:18, Usuario R <r.user.spain en 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 en gmail.com>escribió:
>>>> >>
>>>> >>> Pablo A. Guzzi
>>>> >>
>>>> >>
>>>> >>
>>>> >>
>>>> >> --
>>>> >> Patricia García González
>>>> >>
>>>> >>
>>>> >>
>>>> >
>>>>
>>>> [[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
>>>
>>
>>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20121129/f45ca283/attachment-0001.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: datos.csv
Type: text/csv
Size: 500 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20121129/f45ca283/attachment-0001.bin>
Más información sobre la lista de distribución R-help-es