¿Cómo crear una variable "condicional" en R?

Quiero crear una variable ficticia condicional. Suponga que tengo un conjunto de datos que se parece a esto:

Subject Year    X   X1
   A    1990    1   0
   A    1991    1   0
   A    1992    2   0
   A    1993    3   0
   A    1994    4   0
   A    1995    4   1
   B    1990    0   0
   B    1991    1   0
   B    1992    1   0
   B    1993    2   0
   B    1994    3   0
   C    1990    1   0
   C    1991    2   0
   C    1992    3   1
   C    1993    3   0
   D    1990    1   0
   D    1991    2   0
   D    1992    3   0
   D    1993    4   1
   D    1994    5   0
   E    1990    1   0
   E    1991    1   0
   E    1992    2   1
   E    1993    3   0

Llamemos a esta variable condicional:Q1to3_noX1. Otra variable de interés esQ1to3.

losQ1to3 La variable también es una variable ficticia que indica 1 cuando la X ha alcanzado el valor 3 y 0 en caso contrario (para cada sujeto). Si la X es 4 o más, entonces elQ1to3 La variable debe ser 0. La X es una variable acumulativa (0,1,2,3,4 ...). En otras palabras, elQ1to3 es 1 si el valor máximo de X es 3.

Creé esta variable usando:data$Q1to3 <- ave(data$X, data$Subject, FUN = function(x) if (max(x) == 3) 1 else 0) (Gracias a @ Zelazny7).

losQ1to3_noX1 variable es muy similar a laQ1to3 variable, pero en contraste con elQ1to3 , está condicionado a la variable X1. Para ser más precisos, si X1 = 1 en los siguientes 5 años (contando desde el primer año deQ1to3), elQ1to3_no5 debe ser 0. En otras palabras, elQ1to3_noX1 debe ser 1 si a) el valor máximo de X es 3, b) si X1 = 0 después de 5 años (de lo contrario, 0).

Entiendo de estopregunta que debería usar elrlefunción. Sin embargo, no he podido aplicarlo en este caso particular. ¿Tienes alguna sugerencia?

El resultado deseable debería verse así:

Subject Year    X   X1  Q1to3   Q1to3_noX1
   A    1990    1   0   0          0
   A    1991    1   0   0          0
   A    1992    2   0   0          0
   A    1993    3   0   0          0
   A    1994    4   0   0          0
   A    1995    4   1   0          0
   B    1990    0   0   1          0
   B    1991    1   0   1          1
   B    1992    1   0   1          1
   B    1993    2   0   1          1
   B    1994    3   0   1          1
   C    1990    1   0   1          0
   C    1991    2   0   1          0
   C    1992    3   1   1          0
   C    1993    3   0   1          0
   D    1990    1   0   0          0
   D    1991    2   0   0          0
   D    1992    3   0   0          0
   D    1993    4   1   0          0
   D    1994    5   0   0          0
   E    1990    1   0   1          0
   E    1991    1   0   1          0
   E    1992    2   1   1          0
   E    1993    3   0   1          0

Una muestra reproducible:

    > dput(data)
structure(list(Subject = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 
5L, 5L), .Label = c("A", "B", "C", "D", "E"), class = "factor"), 
    Year = c(1990L, 1991L, 1992L, 1993L, 1994L, 1995L, 1990L, 
    1991L, 1992L, 1993L, 1994L, 1990L, 1991L, 1992L, 1993L, 1990L, 
    1991L, 1992L, 1993L, 1994L, 1990L, 1991L, 1992L, 1993L), 
    X = c(1L, 1L, 2L, 3L, 4L, 4L, 0L, 1L, 1L, 2L, 3L, 1L, 2L, 
    3L, 3L, 1L, 2L, 3L, 4L, 5L, 1L, 1L, 2L, 3L), X1 = c(0L, 0L, 
    0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 
    0L, 1L, 0L, 0L, 0L, 1L, 0L), Q1to3 = c(0L, 0L, 0L, 0L, 0L, 
    0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 
    1L, 1L, 1L, 1L), Q1to3_noX1 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L)), .Names = c("Subject", "Year", "X", "X1", "Q1to3", 
"Q1to3_noX1"), class = "data.frame", row.names = c(NA, -24L))

Respuestas a la pregunta(2)

Su respuesta a la pregunta