我有这样的数据框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)]]