【问题标题】:How to filter rows based on certain criteria?如何根据特定条件过滤行?
【发布时间】:2012-12-08 02:55:12
【问题描述】:

我有一个示例文件如下:

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

谁能帮我解决这个问题?

【问题讨论】:

    标签: r filter rows


    【解决方案1】:

    这是一种可能的方法:

    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,]
    

    如您所见,有很多方法可以做到这一点:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 2022-08-08
      相关资源
      最近更新 更多