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

4

3 回答 3

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
于 2013-07-25T09:47:29.193 回答
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

感谢杰克提供的数据

于 2013-07-25T09:52:48.583 回答
1
df[!apply(df,1,function(x) `%in%`(0,x)),]
于 2013-07-25T09:47:14.803 回答