Supprimer des lignes dans dataframe avec le facteur “”
J'ai un dataframe comme x, où la colonne de gènes est un facteur. Je veux supprimer toutes les lignes où la colonne gènes n'a rien. Ainsi, dans le tableau X, je veux supprimer la ligne 4. Est-il un moyen de le faire pour un grand dataframe?
X
names values genes
1 A 0.2876113 EEF1A1
2 B 0.6681894 GAPDH
3 C 0.1375420 SLC35E2
4 D -1.9063386
5 E -0.4949905 RPS28
Enfin le résultat:
X
names values genes
1 A 0.2876113 EEF1A1
2 B 0.6681894 GAPDH
3 C 0.1375420 SLC35E2
5 E -0.4949905 RPS28
Merci à vous tous!
OriginalL'auteur Lisann | 2011-08-17
Vous devez vous connecter pour publier un commentaire.
Il n'est pas complètement évident à partir de votre question quelles sont les valeurs vides sont, mais vous devriez être en mesure d'adopter la solution ci-dessous (ici, je suppose que le "vide", les valeurs sont des chaînes vides):
Je pense que vous voudrez probablement une
droplevels()
autour de que de se débarrasser de la""
niveau:droplevels(X[-toBeRemoved, ])
Sinon, vous pouvez faire
subset(X, genes != "")
Certain que ce ne serait pas, ce qui avec le support de la confusion 😉
X <- X[-which(X$genes == ""), ]
IDEs et leur syntaxe-les pions de gâcher un programmeur, pas de doute à ce sujet. 🙂
OriginalL'auteur Nick Sabbe
@Nick Sabbe a fourni une réponse, mais il a un inconvénient:
À l'aide de
-which(...)
est un truc intéressant pour (parfois) d'accélérer l'opération. quand il y a seulement quelques éléments à supprimer....Mais si il y a pas d'éléments à enlever, il échoue!
Donc, si
X$genes
ne pas contiennent des chaînes vides,which
sera de retour un vide d'entiers vecteur. La négation qui est encore un vecteur vide. Et X[integer(0)] renvoie un vide de données.cadre de!Ou, si le gain de vitesse n'est pas importante, il suffit de:
Ou, comme @nullglob souligné,
if ( length(toBeRemoved) ) {
. Autre observation: à l'aide desubset
supprime également toutes les lignes oùis.na(X$genes)
est VRAI.OriginalL'auteur Tommy