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

Olivier Nuñez onunez en unex.es
Jue Jun 23 18:08:06 CEST 2016


> 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



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