2012-12-20 7 views
0

J'ai un exemple de fichier comme suit:Comment filtrer les lignes en fonction de certains critères?

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 

J'ai besoin de récupérer la liste des lignes (gènes) si elle a « 2 ou plusieurs échantillons » avec les valeurs « 0.010 ou plus ». Donc, je devrais obtenir la colonne résultante comme suit .:

GENES 
g1 
g4 
g5 

Quelqu'un peut-il me aider?

Répondre

6

est ici une façon possible:

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 

ou de la même ceci:

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

ou ceci:

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

comme vous pouvez le voir, il y a beaucoup de façons de réaliser que :)

+0

Merci beaucoup .. Ça marche :) – Letin

Questions connexes