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é.

Si 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