3 Réponses :
J'aime utiliser un alors vous pouvez faire p> Bien sûr, cela est très spécifique pour obtenir la première valeur non NA. P> p> coalesce () code> fonction pour ce
Merci M. Flick - Avez-vous une préférence pour cette mise en œuvre sur ceux de Stackoverflow.com/Questtions/19253820/... ?
Non, vous devez tester pour voir ce qui est préférable dans votre application particulière.
Cette mise en œuvre est agréable car elle a une conversion de facteur et une manipulation des erreurs - les autres sont encore plus nues.
Je pense que dans ce cas, vous pouvez utiliser la fonction de fusion pour convertir les données en format long, puis supprimer les valeurs manquantes:
library(reshape2) set.seed(10) 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) Y_all = data.frame(group, Y_1, Y_2,Y_3,Y_4,Y_5) Y_all.m = melt(Y_all, id.var="group") Y_all.m = Y_all.m[!is.na(Y_all.m$value),]
Si identique (y_all, y_.all.m $ valeur) code> être vrai? Il semble que les résultats ont été résolus de manière à ce que ce ne soit pas le cas. Hm, idito pour identique (y_all, y_all.m $ valeur [commande (rownames (y_all.m))]) code>
Y_All.M est une longue version de Y_ALL, afin qu'ils ne soient pas identiques. Mais vous pouvez confirmer qu'ils ont les mêmes valeurs comme celle-ci: labraque (y_all [ - 1], table, exclure = null); TAPPLY (Y_ALL.M $ VALEUR, Y_ALL.M $ Variable, table, exclure = null) code>.
Je viens de me faire valoir que vous pouvez également faire: identique (un nom irréaliste (y_all [ - 1])), y_all.m $ valeur) code> (qui donne vrai code>) .
Désolé - je voulais dire le Y_All code> (pas le fichier data.frame que vous donnez le même nom ici), que j'ai pris pour être la sortie souhaitée. Je peux voir que les comptes ont raison dans votre résultat avec (y_all.m, table (valeur, variable)); table (Y_ALL, groupe) code>, mais je ne vois pas quelque chose de correspondant à l'OP ' code> y_all code>; c'est tout. Et je manque ce que le fondre code> fait pour vous.
Stockez les vecteurs dans une matrice, puis sélectionnez:
Ymat <- cbind(Y_1,Y_2,Y_3,Y_4,Y_5) mycol <- apply(!is.na(Ymat),1,which) Y_all.f <- Ymat[cbind(1:nrow(Ymat),mycol)] identical(Y_all,Y_all.f) # TRUE
Pour cette application particulière, la recherche de la première valeur non manquante, le nom de la commande SQL est
coalesce code>, et il y a une très belle réponse de Mise en œuvre de la coopération de SQL dans R .Veuillez utiliser
set.sed code>GREGOR, c'est exactement ça: je ne rencontrerais jamais
réduire code> avant.Je pense que j'ai un plus rapide pour ce cas particulier:
RowMeans (cbind (y_1, y_2, y_3, y_4, y_5), na.rm = true) code> etrowsums code> Ahve a également travaillé si on peut être assuré qu'il y a un montant maximum de 1 article par "rangée".