Buenas tardes a todos los participantes del foro.
Me dirijo a vosotros porque estoy atascado con una duda de programación respecto al data frame:
 

> dd  # Data frame de 5 variables, leído de un archivo txt
  id sexo      nacim     origen      final
1  1    0 02/09/1955 01/04/1985 01/02/2014
2  2    1 29/10/1951 15/08/1996 01/05/2009
3  3    0 30/10/1942 02/08/2000 01/02/2014
4  4    1 22/05/1932 25/02/1993 01/03/2011
5  5    0 29/12/1942 22/06/2007 01/07/2012
6  6    1 18/11/1935 07/08/2010 01/01/2014
 
A este data frame (cuya variable sexo ya está factorizada y cuyas otras variables ya están en formato de fecha) le quiero aplicar el siguiente código :
 
conv <- function(data, edad_u=65)
  { # INICIO DE LA FUNCIÓN
   
  # Elimino individuos que tienen una edad_final < edat_u años
  # ==========================================================
  data$edad_final <- unclass(round(difftime(data$final, data$nacim, units="auto")/365.25,1))
  data <- data[data$edad_final> edad_u,]
  data$edad_final <- NULL # Elimino provisionalmente la variable edad_final
 
  # Con los datos que quedan, distingo 2 situaciones:
  # 1) La fecha de "origen" es anterior ó igual a: 01-01-2006
  # 2) La fecha de "origen" es posterior a: 01-01-2006
  # ==========================================================
  for (i in 1:length(data$origen)) {
    # Fecha de origen anterior o igual al 01-01-2006:
    # -----------------------------------------------
    if ((data$origen[i]) <= as.Date("2006-01-01")) {
    # Creo para este subconjunto la variable temporal "edad_2006"
    data$edad_2006 <- unclass(round(difftime('2006-01-01', data$nacim, units="auto")/365.25,1))
    menor_t_2006 <- data[data$edad_2006 <= edad_u,]
    menor_t_2006$edad_ent <- edad_u
    mayor_t_2006 <- data[data$edad_2006 > edad_u,]
    mayor_t_2006$edad_ent <- unclass(round(difftime('2006-01-01', 
                            mayor_t_2006$nacim,   units="auto")/365.25,1))
    data1.new <- rbind(menor_t_2006, mayor_t_2006)
    data1.new <- data1.new[,-which(names(data1.new) %in% c('edad_2006'))]
    }
    # Fecha de origen posterior al 01-01-2006:
    # ----------------------------------------
    else if(data$origen[i] > as.Date('2006-01-01')) {
    # Creo para este otro subconjunto la variable temporal "edad_origen"
    data$edad_origen <- unclass(round(difftime(data$origen, 
                             data$nacim, units="auto")/365.25,1))
    menor_t_origen <- data[data$edad_origen <= edad_u,]
    menor_t_origen$edad_ent <- edad_u
    mayor_t_origen <- data[data$edad_origen > edad_u,]
    mayor_t_origen$edad_ent <- unclass(round(difftime(mayor_t_origen$origen,
                       mayor_t_origen$nacim, units="auto")/365.25,1))
    data2.new <- rbind(menor_t_origen, mayor_t_origen)
    data2.new <- data2.new[,-which(names(data2.new) %in% c('edad_origen'))]
    }
  }
  # Resultado: Unifico los dos subconjuntos
  # ---------------------------------------
  resultado <- rbind(data1.new, data2.new)
  resultado$edad_final <- unclass(round(difftime(resultado$final,
                        resultado$nacim, units="auto")/365.25,1))
  return(resultado)
 }  # FINAL DE LA FUNCIÓN
 
Mis dudas son dos:
 
1)  La función aplicada sobre el data frame dd no funciona, y me sale el siguiente aviso:
   Error en rbind(deparse.level, ...) : 
      numbers of columns of arguments do not match
 
2) ¿Cómo puedo incluir también como argumento de la función la fecha que desee? (Es decir,
      en el caso anteruior era la fecha 01-01-2006, pero podría ser otra)
 
GRACIAS A TODOS POR VUESTRA AYUDA (si alguien considera algún punto claramente mejorable de la programación, le ruego que me lo diga). ¡Muchas gracias!
 


 		 	   		  
	[[alternative HTML version deleted]]

