如何根据特定条件过滤行?

Let*_*tin 0 r rows filter

我有一个示例文件如下:

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
Run Code Online (Sandbox Code Playgroud)

我需要检索行(基因)列表,如果它有"2个或更多样本",值为"0.010或更多".所以我应该得到如下结果列:

GENES
g1
g4
g5
Run Code Online (Sandbox Code Playgroud)

谁能帮我这个 ?

dig*_*All 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
Run Code Online (Sandbox Code Playgroud)

或者类似这样:

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

或这个:

subSet <- DF[rowSums(DF[,2:ncol(DF)] >= 0.01) >= 2,]
Run Code Online (Sandbox Code Playgroud)

你可以看到有很多方法可以实现:)