2013-07-25 40 views
0

我有一個表,一開始是在這裏:如何根據它包含的數據刪除一行?

>df 
TargetID SM_H1455_121005_4 SM_H1456_121005_1 SM_H1457_121005_7 SM_H1461_121005_2 SM_H1462_121005_8 SM_H1463_121005_1 SM_K1566_121005_6 

ENSG00000002549.7 2286 2468 2498 1696 2044 11536 4100 5460   
ENSG00000002587.5 10 0 6 2 0 2 34 
ENSG00000002726.15 8 14 0 2 16 2 4 
ENSG00000002745.8 6 2 2 0 0 4 6 

我想通過每一行和刪除包含0。這裏的每一行是我的代碼:

for(i in 2:length(df)) { 
df2 <- df[df[,i]!=0,] 
} 

但是這個代碼沒有按不要刪除所有其中有0的行。它刪除了一些行,但我不知道爲什麼,我不認爲它是正確的。有什麼建議麼?

回答

6
R> foo = as.data.frame(matrix(rbinom(25, 5, .25), 5, 5)) 
R> foo 
    V1 V2 V3 V4 V5 
1 1 3 2 3 0 
2 1 1 2 2 1 
3 4 2 1 1 2 
4 0 0 1 1 1 
5 1 2 1 1 2 
R> foo[!rowSums(foo == 0),] ## or just foo[!rowSums(!foo),] 
    V1 V2 V3 V4 V5 
2 1 1 2 2 1 
3 4 2 1 1 2 
5 1 2 1 1 2 
+0

謝謝!這工作:-) – zfz

1
df[!apply(df,1,function(x) `%in%`(0,x)),] 
+0

您好,感謝。我嘗試過,但它只是給了我頭部?這是它給我的:'[1] TargetID SM_H1455_121005_4 SM_H1456_121005_1 SM_H1457_121005_7 SM_H1461_121005_2 SM_H1462_121005_8 SM_H1463_121005_1 SM_K1566_121005_6 <0 rows>(或0長度行。名稱)''。我想要一張新桌子,其中任何地方都沒有0。 – zfz

+0

您的數據是否有任何不包含零的行?這產生了與傑克的答案相同的結果。 – Thomas

2

您可以使用any這樣的:

ind <- apply(foo , 1 , function(x) any(x == 0)) 
foo[ !ind , ] 
    V1 V2 V3 V4 V5 
2 2 1 1 1 2 
4 2 1 1 1 4 

感謝傑克的數據