我有这样的数据框MutationsNumberTable

    ACC BLCA BRCA CESC   HGNC
1:   1    2    6    0   OPN4
2:   2    3    1    1  KLRB1
3:   2   23    4    5  SALL2
4:   1    8    5    7  PLCB2


目标是创建一个矩阵,其中我具有唯一的“基因-癌症类型”对,其中表中的数字大于阈值(比方说5):

所需的输出:

     HGNC Cancer
1:   OPN4 CESC
2:   SALL2 BRCA
3:   SALL2 CESC
4:   PLCB2 BLCA
5:   PLCB2 BRCA
6:   PLCB2 CESC


到目前为止,我可以提出以下建议:

n = ncol(MutationsNumberTable)
whereTrue = MutationsNumberTable[,1:(n-1)] >=threshold


但是在使用这些逻辑值制作我需要的矩阵之后,我遇到了困难。我试过了

colnames(whereTrue)[whereTrue]


但这不是我真正需要的。

最佳答案

我们可以将gather设为'long'格式,然后filter

library(dplyr)
library(tidyr)
gather(df1, Cancer, val, -HGNC) %>%
     filter(val >= 5) %>%
     select(-val)




或使用data.table

library(data.table)
setDT(df1)[, melt(.SD, id.var = 'HGNC')[value >= 5, .(HGNC, Cancer = variable)]]

10-06 10:48