2018-03-06

Filtrar un data frame basado en intervalos de tiempo en R

Problema

Para cada una de las Species queremos quedarnos con la primera imagen (columna ID) de cada intervalo de una hora empezando por la fecha inicial: 2015-03-16 18:42:00. Es decir, para la Specie A, nos queremos quedar con P1, P3 y P4. P2 no la consideraríamos pues está dentro del intervalo de una hora a partir de P1, entre las 18:42 y las 19:41.

  ID Species            DateTime
1 P1       A 2015-03-16 18:42:00
2 P2       A 2015-03-16 19:34:00
3 P3       A 2015-03-16 19:58:00
4 P4       A 2015-03-16 21:02:00
5 P5       B 2015-03-16 21:18:00
6 P6       A 2015-03-16 21:19:00
7 P7       A 2015-03-16 21:33:00
8 P8       B 2015-03-16 21:35:00
9 P9       B 2015-03-16 23:43:00
  • Datos
df <- read.table(
  text = 'ID   Species       DateTime
  P1   A            "2015-03-16 18:42:00"
  P2   A             "2015-03-16 19:34:00"
  P3   A             "2015-03-16 19:58:00"
  P4   A             "2015-03-16 21:02:00"
  P5   B             "2015-03-16 21:18:00"
  P6   A             "2015-03-16 21:19:00"
  P7   A             "2015-03-16 21:33:00"
  P8   B             "2015-03-16 21:35:00"
  P9   B             "2015-03-16 23:43:00"',
  stringsAsFactors = FALSE,
  header = TRUE
)

Solución

Creamos una nueva columna con los intervalos cada 60 minutos y nos quedamos con la primera ocurrencia para cada una de las Species. Es importante señalar que dentro de la función cut tenemos que especificar 60 minutos y no una hora ("1 hour"), o de lo contrario el intervalo no tendría en cuenta los minutos sino solamente las horas. Es decir, comenzaría el primer intervalo a las 18:00 y no a las 18:42.

library(dplyr)
df$DateTime <- as.POSIXct(df$DateTime)
df %>%
  mutate(by60 = cut(DateTime, "60 min")) %>%
  group_by(Species, by60) %>%
  slice(1) %>%
  ungroup() %>%
  select(-by60)

Resultados

# A tibble: 5 x 3
  ID    Species DateTime           
                   
1 P1    A       2015-03-16 18:42:00
2 P3    A       2015-03-16 19:58:00
3 P4    A       2015-03-16 21:02:00
4 P5    B       2015-03-16 21:18:00
5 P9    B       2015-03-16 23:43:00

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos