我有一张桌子,开头就在这里:
>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的所有行。它删除了一些行,但我不确定为什么,我不认为这是正确的。有什么建议?
答案 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)),]