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