【问题标题】:Extract column name and match with another column提取列名并与另一列匹配
【发布时间】:2019-03-08 23:09:00
【问题描述】:

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

但这并不是我所需要的。

【问题讨论】:

    标签: r filtering


    【解决方案1】:

    我们可以将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)]]
    

    【讨论】:

    • data.table 工作得很好,非常感谢!但是收集函数给出错误:选择错误(.,-val):未使用的参数(-val)。
    • @lizaveta 可能是来自另一个包的select 正在屏蔽。你可以试试%>% dplyr::select(-val)
    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多