Isa García Barón
2016-Jun-23 14:09 UTC
[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
Olivier Nuñez
2016-Jun-23 16:08 UTC
[R-es] Asignar a un dataframe un id de otro dataframe en función de intervalos con fechas
> 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
Isa García Barón
2016-Jun-23 22:27 UTC
[R-es] Asignar a un dataframe un id de otro dataframe en función de intervalos con fechas
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]]