21

嗨,我正在使用基因表达矩阵,片段计数来计算差异表达的基因。我想知道如何删除值为 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 而其他值为非零,我想保持该行完整,如您在上面看到的示例。

请让我知道如何做到这一点。

4

2 回答 2

23
df[apply(df[,-1], 1, function(x) !all(x==0)),]
于 2013-08-05T10:29:54.597 回答
2

在 tidyverse 中执行此操作的许多选项已在此处发布:如何使用 dplyr 管道删除所有列为零的行

我的首选选项是使用 rowwise()

library(tidyverse)

df <- df %>% 
    rowwise() %>% 
    filter(sum(c(col1,col2,col3)) != 0)
于 2021-07-19T07:22:59.337 回答