dat1 unten enthalten drei Variablen. Es gibt drei eindeutige IDs, und jede hat mehrere Datensätze. Erstellen Sie eine neue Variable mit einigen Regeln in R
ID <- c(rep(1,7), rep(2,6), rep(3,5))
t <- c(seq(1,7), seq(1,6), seq(1,5))
y <- c(rep(6,7), rep(1,6), rep(6,5))
z <- c(6,NA,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,6,NA,NA,NA,NA)
randn <- rnorm(18,0,1)
dat1 <- data.frame(ID, t, y, z, randn)
bemerken, dass der Wert von z für jede ID ist nicht fehlt, wenn t Minimum (für jede ID die erste Reihe) ist.
Ich muss eine neue Spalte namens NewX erstellen. Beachten Sie, dass jede Zelle im Datenrahmen als Zelle (i, j) ausgedrückt werden kann, wobei i die Nummer der ID und j die Nummer der Aufzeichnung ist. Zum Beispiel ist z (1,1) = 6; z (2,1) = 1 und so weiter.
Fall 1: Wenn j = 1 ist (dh der erste Datensatz für jede ID):
NEWX (i, 1) = rnorm (n = 1, bedeutet = z (i, 1) * randn (i, 1), SD = 1)
Fall 2: wenn j> 1 (dh nicht in erster Datensatz für jede ID)
NEWX (i, j) = rnorm (n = 1 , Mittelwert = randn (i, j) · z (i, j), sd = 1), wobei z (i, j) = z (i, j-1) - NewX (i, j-1)
Ihre Notation ist verwirrend. Sie sollten (i) set.seed verwenden, um ein reproduzierbares Beispiel zu erstellen, und (ii) explizit die Ausgabe anzeigen, die Sie für dieses Beispiel erwarten (zusätzlich zu den Wörtern, die Sie die Regeln dahinter beschreiben). – Frank
Wenn 'NewX' eine Spalte ist, wie könnte sie Zeilen und Spalten haben? Meinst du, es ist ein neuer * Tisch *? – lebelinoz
OP missbraucht Notation, wobei "i" die Gruppe (ID) und "j" die Zeile angibt. Ignoriere alle 'i,' s und denke stattdessen * innerhalb jeder ID ... * Auch im Beispiel von OP sind 'j' und' t' äquivalent. – Gregor