【问题标题】:How to remove rows with 0 values using R如何使用 R 删除具有 0 值的行
【发布时间】:2013-08-05 10:20:45
【问题描述】:

您好,我正在使用基因表达矩阵、片段计数来计算差异表达的基因。我想知道如何删除值为 0 的行。然后我的数据集将是紧凑的,并且对于我使用此矩阵进行的下游分析将给出更少的虚假结果。

输入

gene    ZPT.1   ZPT.0   ZPT.2   ZPT.3   PDGT.1  PDGT.0
XLOC_000001 3516    626 1277    770 4309    9030
XLOC_000002 342 82  185 72  835 1095
XLOC_000003 2000    361 867 438 454 687
XLOC_000004 143 30  67  37  90  236
XLOC_000005 0   0   0   0   0   0
XLOC_000006 0   0   0   0   0   0
XLOC_000007 0   0   0   0   1   3
XLOC_000008 0   0   0   0   0   0
XLOC_000009 0   0   0   0   0   0
XLOC_000010 7   1   5   3   0   1
XLOC_000011 63  10  19  15  92  228

期望的输出

gene    ZPT.1   ZPT.0   ZPT.2   ZPT.3   PDGT.1  PDGT.0
XLOC_000001 3516    626 1277    770 4309    9030
XLOC_000002 342 82  185 72  835 1095
XLOC_000003 2000    361 867 438 454 687
XLOC_000004 143 30  67  37  90  236
XLOC_000007 0   0   0   0   1   3
XLOC_000010 7   1   5   3   0   1
XLOC_000011 63  10  19  15  92  228

到目前为止,我只想删除所有碎片计数列都为 0 的行,如果在任何行中某些值为 0 而其他值为非零,我想保持该行完整,如您在上面的示例所示。

请告诉我该怎么做。

【问题讨论】:

  • df[rowSums(df[, -1])>0, ]
  • @Arun 一个小笨蛋:OP 没有指定他是否有一个整数或浮点数组,所以要小心,您可能需要检查 rowSums 是否大于 1e-10什么的。
  • @CarlWitthoft,我猜生物信息学家的反流开始了。这些是来自基因表达数据的读取计数。它们是离散计数,因此很可能是整数 (>= 0)。

标签: r bioinformatics


【解决方案1】:
df[apply(df[,-1], 1, function(x) !all(x==0)),]

【讨论】:

  • 您能否详细说明我将如何转换它无法理解您编写的命令,抱歉我对 R 的了解有限
  • df 是您的数据框。其余的保持不变
  • 是的。当您假设数据框中没有任何负值时。
  • @bartektartanus,这些是离散计数,因为它们是基因表达值。它们不采用 apply。你可以检查df[rowSums(df[, -1] > 0) != 0, ]
  • 干净是偏好和品味的问题。就我个人而言,我认为使用anyall 更接近问题,然后rowSums hack 暗示对数据的非显而易见假设。将此解决方案从字面上理解为“并非所有 x 都等于零”。
【解决方案2】:

在 tidyverse 中执行此操作的许多选项已在此处发布:How to remove rows where all columns are zero using dplyr pipe

我的首选是使用 rowwise()

library(tidyverse)

df <- df %>% 
    rowwise() %>% 
    filter(sum(c(col1,col2,col3)) != 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2021-04-16
    • 1970-01-01
    • 2021-09-12
    • 2013-09-23
    相关资源
    最近更新 更多