Skip to content
Prev 15219 / 15379 Next

[R-es] Optimizar bucle for

Hola, ¿qué tal?

Modifica esto:

----

library(plyr)

n_reg <- 332505
n_ids <- 63738

dif_days <- 90

df <- data.frame(
  id = sample(n_ids, n_reg, replace = T),
  dates = sample(1000, n_reg, replace = T)
)

# important!
df <- df[order(df$id, df$date),]

n_borrar <- 1

while (n_borrar > 0) {
  df <- ddply(df, .(id), transform, delta = c(1000, diff(dates)))
  # find the first register by id in less than dif_days
  df <- ddply(df, .(id), transform, borrar = cumsum(delta < dif_days))
  n_borrar <- sum(df$borrar == 1)
  print(n_borrar)
  df <- df[df$borrar != 1,]
}

----

Se puede hacer un poco mejor (sacando los ids que ya están limpios de la
iteración), pero no vale la pena: tarda un par de minutos.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com
On Mon, 7 Oct 2024 at 12:01, Griera <griera en yandex.com> wrote: