Hola, como estan?
Tengo que hacer una variable y la unica forma que encontre de hacerlo es
con un bucle, lo cual hace que tarde muchisimo.
Para contextualizarlos, tengo una base de alertas(generadas por
determinadas reglas). Yo hice un campo/variable que indica cuanto tiempo
estuvo (una persona que monitorea estas alertas) sin mirar alertas. Este
campo de llama demora. Ademas tengo un campo que tiene el tiempo en el que
la alerta se vio, segundos_hta
Mi data frame se llama alertas_monitoreo. Las variables influyentes son:
segundos: tiene el tiempo en segundos dia*24*60*60+hora*60*60+min*60+seg.
Este tiempo indica el alta de la alerta, es decir cuando se genero la
alerta.
segundos_hta: tiene el tiempo en segundos
dia*24*60*60+hora*60*60+min*60+seg. Este tiempo indica cuando se miro la
alerta, es decir, cuando el muchacho de monitoreo tomo una accion sobre
esta alerta.
demora: tiene el tiempo en segundo que paso entre la accion de la alerta
anterior y la actual.
alerta: todos unos (1).
Finalmente, la variable que genero es, alertas_demora, que tiene las
alertas que se generaron entre el intervalo de tiempo en el que la persona
de monitoreo estuvo inactiva.
n<-nrow(alertas_monitoreo)
for(i in 1:n) {
#me quedo con el tiempo en el que la alerta fue revisada
  t.i <- alertas_monitoreo$segundos_hta[i]
#creo un objeto que contenga el tiempo entre la alerta anterior a esta y
esta, campo demora.
  intervalo<-alertas_monitoreo$demora[i]
  t.ini <- t.i-intervalo   #creo el intervalo de tiempo
  t.fin <- t.i
#me quedo con las alertas entre generadas
  temp<-subset(alertas_monitoreo, segundos >= t.ini & segundos <=
t.fin)
  alertas<-sum(temp$alerta)
  alertas_monitoreo$alertas_demora[i]<-alertas
  print(paste("faltan ", n-i,sep=" "))
}
Abrazo
Pablo A. Guzzi
guzzipa@gmail.com
	[[alternative HTML version deleted]]
Estimado Pablo Guzzi En una parte de código propio para unos calculos que no tienen nada que ver, pero hay un data.frame (Serv), donde a cada Serv$RP (¿persona?)realizo la función de contar, bueno aquí podría ir la parte de su calculo. Luego a mi me gusta juntar esos resultados al data.frame original. busco <- do.call(rbind, by(Serv, Serv$RP, function(x) cbind(1:nrow(x)))) Serv <- data.frame(Serv, busco) De esa forma entiendo que uso una versión vectorizada cosa que su código no realiza, pero también entiendo que en las últimas versiones de R no habría tanta diferencia. Le propongo intentar ambas más una tercera, a su mismo código lo compila en R y mide el tiempo con las tres opciones, lógicamente sería bueno que comparta ese resultado con el resto de la lista. Javier Marcuzzi El mié, 30-01-2013 a las 10:02 -0300, Pablo Andres Guzzi escribió:> > t.fin <- t.i
Pablo, por las dudas, al compilar me refiero a los ejemplos y
utilización del paquete:
compile {compiler}
Javier
El mié, 30-01-2013 a las 10:02 -0300, Pablo Andres Guzzi
escribió:> Hola, como estan?
> 
> Tengo que hacer una variable y la unica forma que encontre de hacerlo es
> con un bucle, lo cual hace que tarde muchisimo.
> 
> Para contextualizarlos, tengo una base de alertas(generadas por
> determinadas reglas). Yo hice un campo/variable que indica cuanto tiempo
> estuvo (una persona que monitorea estas alertas) sin mirar alertas. Este
> campo de llama demora. Ademas tengo un campo que tiene el tiempo en el que
> la alerta se vio, segundos_hta
> 
> Mi data frame se llama alertas_monitoreo. Las variables influyentes son:
> segundos: tiene el tiempo en segundos dia*24*60*60+hora*60*60+min*60+seg.
> Este tiempo indica el alta de la alerta, es decir cuando se genero la
> alerta.
> segundos_hta: tiene el tiempo en segundos
> dia*24*60*60+hora*60*60+min*60+seg. Este tiempo indica cuando se miro la
> alerta, es decir, cuando el muchacho de monitoreo tomo una accion sobre
> esta alerta.
> demora: tiene el tiempo en segundo que paso entre la accion de la alerta
> anterior y la actual.
> alerta: todos unos (1).
> 
> Finalmente, la variable que genero es, alertas_demora, que tiene las
> alertas que se generaron entre el intervalo de tiempo en el que la persona
> de monitoreo estuvo inactiva.
> 
> 
> n<-nrow(alertas_monitoreo)
> 
> for(i in 1:n) {
> #me quedo con el tiempo en el que la alerta fue revisada
>   t.i <- alertas_monitoreo$segundos_hta[i]
> #creo un objeto que contenga el tiempo entre la alerta anterior a esta y
> esta, campo demora.
>   intervalo<-alertas_monitoreo$demora[i]
>   t.ini <- t.i-intervalo   #creo el intervalo de tiempo
>   t.fin <- t.i
> 
> #me quedo con las alertas entre generadas
>   temp<-subset(alertas_monitoreo, segundos >= t.ini & segundos
<= t.fin)
>   alertas<-sum(temp$alerta)
>   alertas_monitoreo$alertas_demora[i]<-alertas
>   print(paste("faltan ", n-i,sep=" "))
> }
> 
> 
> 
> 
> 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
Hola, ¿qué tal?
Creo que te bastaría con algo así:
n<-nrow(alertas_monitoreo)
for(i in 1:n) {
  alertas_monitoreo$alertas_demora[i] <- i -
sum(alertas_monitoreo$segundos < alertas_monitoreo$segundos_hta[i] -
alertas_monitoreo$demora[i] ) )
  print(paste("faltan ", n-i,sep=" "))
}
Resto a i (las abiertas hasta la fecha) las abiertas antes de hta - demora.
Menos código, menos tiempo.
Y aún admite mejoras:
1) Precalcular (vectorialmente) alertas_monitoreo$segundos_hta[i] -
alertas_monitoreo$demora[i]  (llamémoslo v)
2) Tal vez usar cut (?cut) con los cortes dados por v y luego cumsum
(suma acumulada)
3) ...
Un saludo,
Carlos J. Gil Bellosta
http://www.datanalytics.com
El día 30 de enero de 2013 14:02, Pablo Andres Guzzi
<guzzipa en gmail.com> escribió:> Hola, como estan?
>
> Tengo que hacer una variable y la unica forma que encontre de hacerlo es
> con un bucle, lo cual hace que tarde muchisimo.
>
> Para contextualizarlos, tengo una base de alertas(generadas por
> determinadas reglas). Yo hice un campo/variable que indica cuanto tiempo
> estuvo (una persona que monitorea estas alertas) sin mirar alertas. Este
> campo de llama demora. Ademas tengo un campo que tiene el tiempo en el que
> la alerta se vio, segundos_hta
>
> Mi data frame se llama alertas_monitoreo. Las variables influyentes son:
> segundos: tiene el tiempo en segundos dia*24*60*60+hora*60*60+min*60+seg.
> Este tiempo indica el alta de la alerta, es decir cuando se genero la
> alerta.
> segundos_hta: tiene el tiempo en segundos
> dia*24*60*60+hora*60*60+min*60+seg. Este tiempo indica cuando se miro la
> alerta, es decir, cuando el muchacho de monitoreo tomo una accion sobre
> esta alerta.
> demora: tiene el tiempo en segundo que paso entre la accion de la alerta
> anterior y la actual.
> alerta: todos unos (1).
>
> Finalmente, la variable que genero es, alertas_demora, que tiene las
> alertas que se generaron entre el intervalo de tiempo en el que la persona
> de monitoreo estuvo inactiva.
>
>
> n<-nrow(alertas_monitoreo)
>
> for(i in 1:n) {
> #me quedo con el tiempo en el que la alerta fue revisada
>   t.i <- alertas_monitoreo$segundos_hta[i]
> #creo un objeto que contenga el tiempo entre la alerta anterior a esta y
> esta, campo demora.
>   intervalo<-alertas_monitoreo$demora[i]
>   t.ini <- t.i-intervalo   #creo el intervalo de tiempo
>   t.fin <- t.i
>
> #me quedo con las alertas entre generadas
>   temp<-subset(alertas_monitoreo, segundos >= t.ini & segundos
<= t.fin)
>   alertas<-sum(temp$alerta)
>   alertas_monitoreo$alertas_demora[i]<-alertas
>   print(paste("faltan ", n-i,sep=" "))
> }
>
>
>
>
> 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