[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