Wie erstelle ich eine "bedingte" Variable in R?

Ich möchte eine bedingte Dummy-Variable erstellen. Angenommen, ich habe einen Datensatz, der ungefähr so aussieht:

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

Nennen wir diese bedingte Variable: Q1to3_noX1. Eine weitere interessante Variable ist Q1to3.

Das Q1to3ie Variable @ ist auch eine Dummy-Variable, die 1 anzeigt, wenn das X den Wert 3 erreicht hat, und andernfalls 0 (für jeden Betreff). Wenn das X 4 oder mehr ist, dann ist das Q1to3 Variable sollte 0 sein. Das X ist eine kumulative Variable (0,1,2,3,4 ...). Mit anderen Worten, das Q1to3 ist 1, wenn der maximale X-Wert 3 ist.

Ich habe diese Variable erstellt mit:data$Q1to3 <- ave(data$X, data$Subject, FUN = function(x) if (max(x) == 3) 1 else 0) (danke an @ Zelazny7).

Das Q1to3_noX1ie Variable @ ist der Variable @ sehr ähnlic Q1to3 Variable, aber im Gegensatz zum Q1to3, es ist abhängig von der Variablen X1. Genauer gesagt, wenn X1 = 1 in den folgenden 5 Jahren (ab dem ersten Jahr von Q1to3), das Q1to3_no5 sollte 0 sein. Mit anderen Worten, das Q1to3_noX1 sollte 1 sein, wenn a) der maximale X-Wert 3 ist, b) wenn X1 = 0 nach 5 Jahren (ansonsten 0).

Ich verstehe aus diesemFrag dass ich das @ benutzen sollrleFunktion. In diesem speziellen Fall konnte ich es jedoch nicht anwenden. Haben Sie Vorschläge?

Das gewünschte Ergebnis sollte folgendermaßen aussehen:

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

Eine reproduzierbare Probe:

    > 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))

Antworten auf die Frage(4)

Ihre Antwort auf die Frage