[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