如何根据它包含的数据删除行?

时间:2013-07-25 09:42:24

标签: r for-loop bioinformatics delete-row

我有一张桌子,开头就在这里:

>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的所有行。它删除了一些行,但我不确定为什么,我不认为这是正确的。有什么建议?

3 个答案:

答案 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

答案 1 :(得分: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

感谢Jake的数据

答案 2 :(得分:1)

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