2012-12-20 31 views
0

我有一个例子文件如下:如何根据特定标准过滤行?

GENES Samp1 Samp2 Samp3 Samp4 Samp5 Samp6 Samp7 Samp8 
g1 0.000 0.000 0.000 0.000 0.010 0.000 0.022 0.344 
g2 0.700 0.000 0.000 0.000 0.000 0.000 0.000 0.000 
g3 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 
g4 0.322 0.782 0.000 0.023 0.000 0.000 0.000 0.345 
g5 0.010 0.000 0.333 0.000 0.000 0.000 0.011 0.000 
g6 0.000 0.000 0.010 0.000 0.000 0.000 0.000 0.000 

我需要检索的行(基因)的列表中,如果它有“2个或更多的样品”同值“0.010或更多个”。所以我应该得到的结果列如下:

GENES 
g1 
g4 
g5 

任何人都可以帮助我吗?

回答

6

这里是一个可能的方式:

DF <- read.table(text= 
"GENES Samp1 Samp2 Samp3 Samp4 Samp5 Samp6 Samp7 Samp8 
g1 0.000 0.000 0.000 0.000 0.010 0.000 0.022 0.344 
g2 0.700 0.000 0.000 0.000 0.000 0.000 0.000 0.000 
g3 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 
g4 0.322 0.782 0.000 0.023 0.000 0.000 0.000 0.345 
g5 0.010 0.000 0.333 0.000 0.000 0.000 0.011 0.000 
g6 0.000 0.000 0.010 0.000 0.000 0.000 0.000 0.000",header=T,sep=' ') 


rows <- sapply(1:nrow(DF),FUN=function(i){sum(DF[i,2:ncol(DF)] >= 0.01) >= 2}) 
subSet <- DF[rows,] 

> subSet 
    GENES Samp1 Samp2 Samp3 Samp4 Samp5 Samp6 Samp7 Samp8 
1 g1 0.000 0.000 0.000 0.000 0.01  0 0.022 0.344 
4 g4 0.322 0.782 0.000 0.023 0.00  0 0.000 0.345 
5 g5 0.010 0.000 0.333 0.000 0.00  0 0.011 0.000 

或类似这样的:

subSet <- DF[apply(DF,1,function(x){sum(tail(x,-1) >= 0.01) >= 2}),] 

或本:

subSet <- DF[rowSums(DF[,2:ncol(DF)] >= 0.01) >= 2,] 

,你可以看到有很多方法来实现这一目标:)

+0

非常感谢..它的工作:) – Letin