[R-es] Asignar a un dataframe un id de otro dataframe en función de intervalos con fechas

Isa García Barón xanamb en gmail.com
Vie Jun 24 00:27:21 CEST 2016


Muchas gracias Olivier, funciona perfecto!

El 23 de junio de 2016, 18:08, Olivier Nuñez <onunez en unex.es> escribió:

> > tapply(df2$time,df2$label,FUN=function(x) df1$id[!(x<df1$begin |
> x>df1$end)])
>  2012_1 2012_10  2012_2  2012_3  2012_4  2012_5  2012_6  2012_7  2012_8
> 2012_9
>       2       9       2       2       2       2       2       5       9
>   10
>
> Un saludo. Olivier
>
>
> ----- Mensaje original -----
> De: "Isa García Barón" <xanamb en gmail.com>
> Para: r-help-es en r-project.org
> Enviados: Jueves, 23 de Junio 2016 16:09:21
> Asunto: [R-es] Asignar a un dataframe un id de otro dataframe en función
> de intervalos con fechas
>
> Hola a todxs,
>
> No encuentro la manera de hacer algo que aparentemente parece muy sencillo:
>
> Tengo dos dataframe, en el primero tengo una serie de códigos con hora de
> inicio y hora de fin y en el segundo otros códigos asociados a una hora; Lo
> que necesito es crear una nueva variable en el segundo data frame que
> indique a qué intervalo del primer data frame (df1$id) pertenece cada nivel
> del segundo dataframe (df2$label).
>
> Os dejo un ejemplo reproducible:
>
> df1 <- data.frame(id=seq(1, 10, 1),begin=c("2012-09-06
> 09:34:00","2012-09-06
> 10:18:00","2012-09-06 10:53:00","2012-09-06 11:28:00","2012-09-06
> 12:02:00","2012-09-06 12:36:00","2012-09-06 16:36:00","2012-09-07
> 08:42:00","2012-09-07 09:16:00", "2012-09-07 09:51:00"),end=c("2012-09-06
> 10:03:00","2012-09-06 10:53:00","2012-09-06 11:28:00","2012-09-06
> 12:02:00","2012-09-06 12:36:00","2012-09-06 12:55:00","2012-09-06
> 16:59:00","2012-09-07 09:16:00","2012-09-07 09:51:00","2012-09-07
> 10:17:00"))
>
> df2 <- data.frame(label=c("2012_1",
>
> "2012_2","2012_3","2012_4","2012_5","2012_6","2012_7","2012_8","2012_9","201
> 2_10"),time=c("2012-09-06 10:34:00","2012-09-06 10:35:00","2012-09-06
> 10:36:00","2012-09-06 10:37:00","2012-09-06 10:38:00","2012-09-06
> 10:39:00","2012-09-06 12:33:00","2012-09-07 09:19:00","2012-09-07
> 09:52:00",
> "2012-09-07 09:43:00"))
>
> resultado <- data.frame(label=c("2012_1",
>
> "2012__2","2012_3","2012_4","2012_5","2012_6","2012_7","2012_8","2012_9","20
> 12_10"),date=c("2012-09-06 10:34:00","2012-09-06 10:35:00","2012-09-06
> 10:36:00","2012-09-06 10:37:00","2012-09-06 10:38:00","2012-09-06
> 10:39:00","2012-09-06 12:33:00","2012-09-07 09:19:00","2012-09-07
> 09:52:00","2012-09-07 09:43:00"),id=c(2,2,2,2,2,2,5,8,9,8))
>
> Supongo que el primer paso es convertir las variables que tienen fecha a
> formato POSIXlt con strptime{base}, así:
>
> df1$begin <- strptime(df1$begin, format="%Y-%m-%d %H:%M:%S")
> df1$end <- strptime(df1$end, format="%Y-%m-%d %H:%M:%S")
>
> df2$date <- strptime(df2$date, format="%Y-%m-%d %H:%M:%S")
>
> y quizá después calcular el intervalo entre las fechas del df1, así:
>
> df1$intervals <- as.interval(df1$begin, df1$end)
>
> A partir de aquí no sé cómo asignar la variable id a df2, he probado con
> %within%, pero quizá no se cómo usarlo bien,
>
> Muchísimas gracias,
>
> Isa
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



-- 
*-----------------------------------------------------------------------------------------------------*
*Isabel García Barón*
Email: xanamb en gmail.com
PhD Student at AZTI Foundation -  AZTI Fundazioa
Marine Ecosystems Functioning
Herrera Kaia, Portualdea z/g 20110 - Pasaia (Gipuzkoa)

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es