Hola,
Otra forma, utilizando la función de intervalos y la que comprueba si otro
intervalo se solapa del paquete "lubridate":
#----------------------
library(lubridate)
fe.chas <- data.frame(
entra=c('2001-01-01','2001-06-01','2003-01-01')
,sale=c('2002-01-01','2002-06-01','2004-01-01')
)
ref <- new_interval(ymd('2001-12-01'), ymd('2002-01-01'))
mapply(
function(x,y,z) {int_overlaps(new_interval(x,y),z)}
,fe.chas$entra, fe.chas$sale, ref
)
#---------------------
âProduce este resultado:
> fe.chas <- data.frame(
+ entra=c('2001-01-01','2001-06-01','2003-01-01')
+ ,sale=c('2002-01-01','2002-06-01','2004-01-01')
+ )
> fe.chas
entra sale
1 2001-01-01 2002-01-01
2 2001-06-01 2002-06-01
3 2003-01-01 2004-01-01
> ref <- new_interval(ymd('2001-12-01'), ymd('2002-01-01'))
> ref
[1] 2001-12-01 UTC--2002-01-01 UTC
>
> mapply(
+ function(x,y,z) {int_overlaps(new_interval(x,y),z)}
+ ,fe.chas$entra, fe.chas$sale, ref
+ )
[1] TRUE TRUE FALSE
> â
âSaludos,
Carlos Ortega
www.qualityexcellence.esâ
El 17 de julio de 2014, 21:18, Francisco Javier <[email protected]>
escribió:
>
>
> En primer lugar, muchas gracias Carlos por la rápida y elegante respuesta.
> La he aplicado a mi base de datos, y rápidamente he obtenido "casi" el
> mismo resultado que obtenÃa de forma rudimentaria. Digo "casi" porque hay
> una pequeña diferencia de valor. Me ha faltado decir (me disculpo) que
> también hay que seleccionar a las personas que entran el 31 de diciembre en
> caso de que éstas no llegan a permanecer como mÃnimo hasta el 1 de enero
> que tiene lugar 1 año y un dÃa después.Adaptando este hecho a tu ejemplo de
> resolución (he cambiado a 20 el valor de "ini" del individuo "d"): # Datos
> simuladosdat <- data.frame(id = letters[1:4], ini = c(1, 15, 15, 20), fin =
> c(11, 19, 25, 22))fin.anno <- 10 * 1:3 # Resultado que
> retorna:dat[mapply(function(x,y) ! any(fin.anno %in% x:y), dat$ini,
> dat$fin),] id ini fin2 b 15 19 Sin embargo, el último caso tampoco
> serÃa válido, pues reúne las dos condiciones comentadas: a) Ha entrado
> justo en un número del vector "fin.anno" y b) Su dato del vector "fin" es
> 22, es decir, no llega a superar el siguiente valor del vector "fin.anno"
> (en este caso serÃa 30): # Resultado que esperarÃa: id ini fin2 b 15
> 194 d 20 22 No sé si me explico, y muchas gracias.
> [[alternative HTML version deleted]]
>
>
> _______________________________________________
> R-help-es mailing list
> [email protected]
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
--
Saludos,
Carlos Ortega
www.qualityexcellence.es
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es