EDIT: questo è un dupe di How to implement coalesce efficiently in R, d'accordo. Non mi ero reso conto di quanto il mio problema fosse più generale della mia specifica applicazione, quindi questa discussione è stata grandiosa.ifelse annidato() è il peggiore; Qual è il miglior?
A volte, la variabile di risposta in un esperimento randomizzato è contenuta in una colonna diversa per ciascun gruppo sperimentale (da Y_1 a Y_5 nel seguente codice). Spesso è meglio raccogliere la variabile di risposta in una singola colonna (Y_all). Finisco per farlo come nell'esempio qui sotto. Ma sono sicuro che c'è un modo migliore. pensieri?
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)
Per questa particolare applicazione, trovando il primo valore non mancante, il nome del comando SQL è 'coalesce', e c'è una bella risposta di [implementazione della coalesce di SQL in R] (http://stackoverflow.com/q/19253820/903 mila sessantauno). – Gregor
Si prega di utilizzare 'set.seed' – Frank
Gregor, questo è esattamente questo: non mi sarei mai imbattuto in' Reduce' prima. –