EDIT: Dies ist ein Betrogen von How to implement coalesce efficiently in R, vereinbart. Ich wusste nicht, dass mein Problem allgemeiner war als meine spezifische Anwendung, daher war diese Diskussion großartig.geschachtelt ifelse() ist das Schlimmste; Was ist das Beste?
Manchmal ist die Antwortvariable in einem randomisierten Experiment in einer anderen Spalte für jede experimentelle Gruppe enthalten (Y_1 bis Y_5 im folgenden Code). Es empfiehlt sich oft, die Antwortvariable in einer einzigen Spalte (Y_all) zu sammeln. Am Ende mache ich es wie im Beispiel unten. Aber ich bin sicher, es gibt einen besseren Weg. Gedanken?
set.seed(343)
N <- 1000
group <- sample(1:5, N, replace=TRUE)
Y_1 <- ifelse(group==1, rbinom(sum(group==1), 1, .5), NA)
Y_2 <- ifelse(group==2, rbinom(sum(group==2), 1, .5), NA)
Y_3 <- ifelse(group==3, rbinom(sum(group==3), 1, .5), NA)
Y_4 <- ifelse(group==4, rbinom(sum(group==4), 1, .5), NA)
Y_5 <- ifelse(group==5, rbinom(sum(group==5), 1, .5), NA)
## This is the part I want to make more efficient
Y_all <- ifelse(!is.na(Y_1), Y_1,
ifelse(!is.na(Y_2), Y_2,
ifelse(!is.na(Y_3), Y_3,
ifelse(!is.na(Y_4), Y_4,
ifelse(!is.na(Y_5), Y_5,
NA)))))
table(Y_all, Y_1, exclude = NULL)
table(Y_all, Y_2, exclude = NULL)
Für diese spezielle Anwendung, der erste nicht fehlende Wert, der Name des SQL-Befehls ist 'coalesce', und es gibt eine sehr schöne Antwort von [Implementierung von SQL-Koaleszieren in R] (http://stackoverflow.com/q/19253820/903061). – Gregor
Bitte verwenden Sie 'set.seed' – Frank
Gregor, das ist genau das: Ich würde nie' Reduce' vorher finden. –