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

Responder a