Supprimer des lignes de dataframe qui ne contient que des 0 ou juste un seul 0
Je suis en train de créer une fonction dans R qui va me permettre de filtrer mon ensemble de données basé sur si une ligne contient une seule colonne avec un zéro. En outre, certaines fois je veux seulement supprimer les lignes qui est nul dans toutes les colonnes.
Aussi, et c'est là que ça devient drôle; pas toutes les colonnes contenant des chiffres et le nombre de colonnes peut varier.
J'ai essayé de coller certaines de mes données ici avec les résultats que je veux obtenir.
unfiltered:
ID GeneName DU145small DU145total PC3small PC3total
1 MIR22HG 33221.5 1224.55 2156.43 573.315
2 MIRLET7E 87566.1 7737.99 25039.3 16415.6
3 MIR612 0 0 530.068 0
4 MIR218-1 0 0 1166.88 701.253
5 MIR181B2 70723.2 3958.01 6209.85 1399.34
6 MIR218-2 0 0 0 0
7 MIR10B 787.516 330.556 0 20336.4
8 MIR3176 0 0 0 0
any rows with containing a zero removed:
ID GeneName DU145small DU145total PC3small PC3total
1 MIR22HG 33221.5 1224.55 2156.43 573.315
2 MIRLET7E 87566.1 7737.99 25039.3 16415.6
5 MIR181B2 70723.2 3958.01 6209.85 1399.34
only rows that is all zero is filtered away:
ID GeneName DU145small DU145total PC3small PC3total
1 MIR22HG 33221.5 1224.55 2156.43 573.315
2 MIRLET7E 87566.1 7737.99 25039.3 16415.6
3 MIR612 0 0 530.068 0
4 MIR218-1 0 0 1166.88 701.253
5 MIR181B2 70723.2 3958.01 6209.85 1399.34
7 MIR10B 787.516 330.556 0 20336.4
J'ai trouver un moyen de supprimer toutes les lignes qui ont eu au moins 1 zéro, mais c'est de la "triche" par l'échange de tous les zéros avec NA et puis, à l'aide complète.cas de filtre.
Également, en faisant que il supprimer toutes les lignes où le GeneName
eu un zéro (comme pour MIR10B).
Je peux le résoudre en utilisant des boucles, mais j'ai été dit que les boucles dans R est très inefficace et voudrais donc éviter cette solution.
EDIT: Alors que Xin Yin solution fonctionne parfaitement bien et conservées les données dans une trame de données, la réponse de David Arenburg est censé être plus efficace et devrait être utilisé.
df
est dataset. 1er cas serait: df[!rowSums(!df[-(1:2)]),]
et 2ème df[!rowSums(!df[-(1:2)])==4,]
OriginalL'auteur KnightofniDK | 2014-08-08
Vous devez vous connecter pour publier un commentaire.
À l'aide de
data.table
(en supposant quedf
est votre jeu de données)Ou si vous voulez seulement de supprimer les lignes avec tous les zéros
vous pouvez toujours faire
as.data.frame
sur l'objet. À l'aide deapply
est généralement la méthode la moins recommandée, car il est très très lent, donc, à partir de toutes les réponses ici, l'une à l'aide deapply
est le pireVous avez un point en effet. L'efficacité est importante, surtout lorsque les ensembles de données grossir.
OriginalL'auteur David Arenburg
Supprimer les lignes avec tout zéro:
Supprimer les lignes avec tous les zéros:
Inspiré par cette question
OriginalL'auteur docendo discimus
À l'aide de
rowSums
plus de sous-ensemble de colonnes, essayez ceci:OriginalL'auteur zx8754
Ce serait le travail
OriginalL'auteur Xin Yin