[R-es] Selección eficiente de individuos
Carlos J. Gil Bellosta
cgb en datanalytics.com
Jue Jul 17 18:42:56 CEST 2014
Simplificando (i.e., asumiendo que los días fin de año son los múltiplos de 10):
# datos simulados
dat <- data.frame(id = letters[1:4],
ini = c(1, 15, 15, 11),
fin = c(11, 19, 25, 22))
fin.anno <- 10 * 1:3
# resultado
dat[mapply(function(x,y) ! any(fin.anno %in% x:y), dat$ini, dat$fin),]
Un saludo,
Carlos J. Gil Bellosta
http://www.datanalytics.com
El día 17 de julio de 2014, 17:19, Francisco Javier
<iterador10 en hotmail.com> escribió:
>
> Buenas
> tardes,
>
> Tengo un
> data frame denominado “trabajadores”, que cubre desde el 1 de
> enero de 1997 hasta el 30 junio de 1999, con 3 columnas: Identificador (ID), la
> fecha de entrada en la empresa (ENT) y la fecha de salida (SAL). Deseo localizar
> aquellos trabajadores que, durante dicho periodo, NO han llegado a pasar un 31
> de diciembre y un 1 de enero seguidos (cambio de año) como asalariados de la
> empresa, para lo cual hago:
>
> ## Los
> que entran durante 1997 pero no llegan al 1 de enero de 1998
>
> t1 <-
> intersect ( trabajadores[trabajadores$ENT==as.Date("1997-01-01"),]$ID
> ,
>
> trabajadores[trabajadores$SAL==as.Date("1997-12-31"),]$ID
> )
>
> t2 <-
> intersect ( trabajadores[trabajadores$ENT==as.Date("1997-01-01"),]$ID
> ,
>
> trabajadores[trabajadores$SAL<as.Date("1997-12-31"),]$ID
> )
>
> t3 <-
> intersect ( trabajadores[trabajadores$ENT>as.Date("1997-01-01"),]$ID
> ,
>
> trabajadores[trabajadores$SAL==as.Date("1997-12-31"),]$ID
> )
>
> t4 <-
> intersect ( trabajadores[trabajadores$ENT>as.Date("1997-01-01"),]$ID
> ,
>
> trabajadores[trabajadores$SAL<as.Date("1997-12-31"),]$ID
> )
>
> ## Los
> que entran durante 1998 pero no llegan al 1 de enero de 1999
>
> t5 <-
> intersect ( trabajadores[trabajadores$ENT==as.Date("1998-01-01"),]$ID
> ,
>
> trabajadores[trabajadores$SAL==as.Date("1998-12-31"),]$ID
> )
>
> t6 <-
> intersect ( trabajadores[trabajadores$ENT==as.Date("1998-01-01"),]$ID
> ,
>
> trabajadores[trabajadores$SAL<as.Date("1998-12-31"),]$ID
> )
>
> t7 <-
> intersect ( trabajadores[trabajadores$ENT>as.Date("1998-01-01"),]$ID
> ,
>
> trabajadores[trabajadores$SAL==as.Date("1998-12-31"),]$ID
> )
>
> t8 <-
> intersect ( trabajadores[trabajadores$ENT>as.Date("1998-01-01"),]$ID
>
> trabajadores[trabajadores$SAL<as.Date("1998-12-31"),]$ID
> )
>
> localizados
> <- c(t1, t2, t3, t4, t5, t6, t7, t8)
>
>
>
> ¿Existe
> alguna forma más eficiente de localizar a los mismos individuos? ¡¡ Muchísimas gracias !!
>
>
> [[alternative HTML version deleted]]
>
>
> _______________________________________________
> 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