Méthode efficace de sous-ensemble déplacer lignes avec NA des valeurs dans R
Fond
Avant d'exécuter une série d'étapes de sélection de modèle, j'ai besoin de supprimer des valeurs manquantes pour un de mes termes du modèle. Avec très peu de termes dans mon modèle, il y a donc assez peu de vecteurs que j'ai besoin de regarder dans pour NA de valeurs (et de la chute de toutes les lignes qui ont NA des valeurs dans l'un de ces vecteurs). Cependant, il y a aussi des vecteurs qui contiennent NA des valeurs que je ne veux pas l'utiliser comme conditions /critères de l'abandon de lignes.
Question
Comment puis-je déposer des lignes à partir d'un dataframe qui contiennent NA les valeurs de toute une liste de vecteurs? Je suis actuellement en utilisant le maladroit méthode d'une longue série !est.na
> my.df[!is.na(my.df$termA)&!is.na(my.df$termB)&!is.na(my.df$termD),]
mais je suis sûr qu'il est plus élégant de la méthode.
Je n'avais pas, et ce qu'est une fonction utile, merci! Dans ce cas, j'ai d'autres vecteurs avec NA des valeurs, que je ne suis pas en utilisant et en des termes si ne souhaitez pas utiliser l'abandon de critères, de sorte qu'il ne fonctionne pas parfaitement ici.
J'ai ajouté que les détails de la question.
OriginalL'auteur Oreotrephes | 2013-12-03
Vous devez vous connecter pour publier un commentaire.
Laisser
dat
être un bloc de données etcols
un vecteur de colonne des noms ou des numéros de colonne d'intérêt. Ensuite, vous pouvez utiliserà exclure toutes les lignes avec au moins un
NA
.NA
s dans des colonnes spécifiques. J'aime toujours lewith
une solution, car il permet de faire d'autres conditions bien et puis aussi fonctionne bien avec modification de données in situ à l'aide dewithin
.OriginalL'auteur Sven Hohenstein
Edit: j'ai complètement omis de
subset
, la fonction intégrée est faite pour les sous-paramètre de choses:J'ai tendance à utiliser
with()
pour ce genre de choses. N'utilisez pas deattach
, vous êtes lié pour couper vous-même.Mais si vous souvent de le faire, vous pourriez également une fonction d'assistance,
is_any()
Si vous finissez par faire beaucoup de ce genre de chose, à l'aide de SQL est souvent va être une belle interaction avec les sous-ensembles de données.
dplyr
peut également s'avérer utile.OriginalL'auteur Tyler
De cette manière:
Et en voici un autre, à l'aide de
sapply(...)
etReduce(...)
:La première instruction "s'applique" la fonction
is.na(...)
aux colonnes 2:4 dedf
, et à l'inverse le résultat (nous voulons!NA
). La deuxième déclaration s'applique la logique&
opérateur pour les colonnes dexx
dans la succession. La troisième instruction extrait uniquement les lignes avecyy=T
. Clairement, ce peut être combiné dans un terrifiant compliqué déclaration.À l'aide de
sapply(...)
etReduce(...)
peut être plus rapide si vous avez de très nombreuses colonnes.Enfin, la plupart des fonctions de modélisation ont des paramètres qui peuvent être définis pour traiter NA directement (sans avoir à recourir à tout cela). Voir, par exemple, le
na.action
paramètre dans lm(...).with
pour l'avantage qu'il traduit bien à plusieurs des critères disparates (couleur = = "vert", les espèces %in% c ("setosa', 'versicolor'), etc.)OriginalL'auteur jlhoward