热图的数字矩阵的字符矩阵

时间:2016-12-20 09:24:12

标签: r matrix dplyr bioinformatics heatmap

我已经使用EnsembIDs和三个样本(RNA-seq - > kallisto - > sleuth)为前100个差异表达的转录本创建了热图。

library(gplots) # heatmap.2
library(dplyr) # unite

heatmap.2(log(tmp_df+1), trace="none", density.info="none", scale="row")

现在我有兴趣在热图中添加基因名称,例如EnsemblD_genename。为此,我进行了如下工作:

1)创建" ext_gene" tmp_df中的列

tmp_df["ext_gene"] <- NA

2)来自tmp_df的target_id与top_100new的target_id匹配(包含ext_gene)

tmp_df$ext_gene <- top_100new$ext_gene[match(tmp_df$target_id, top_100new$target_id)]

3)合并tmp_df中的target_id和ext_gene列(target_id__ext_gene列代替target_id和ext_gene列)

unite <- unite(tmp_df, target_id__ext_gene, target_id, ext_gene, sep='_')

4)我无法转换&#34;团结&#34;到数字矩阵因为一列&#34; target_id__ext_gene&#34;在某些行中具有NA,例如ENSEMBL00001_NA,所以我试图用NONE替换NA。

unite$target_id__ext_gene <- gsub ('NA', 'NONE', unite$target_id__ext_gene)

5)但是,我仍然无法转换&#34;联合&#34;因为列&#34; target_id__ext_gene&#34;有角色类。我试过用

unite$target_id__ext_gene <- as.numeric(as.character(unite$target_id__ext_gene))

但是,它会转换列的所有行&#34; target_id__ext_gene&#34;进入NA(NAs introduced by coercion

我知道数字对象可以传递给heatmap.2并且只有因为一个字符列而被卡住了。

这是我使用reproduce(unite)的数据的样子:

                   target_id__ext_gene      T2   Npt3         n1   Npt1   Npt2        T3
    1)             ENS00000112_NONE 5239.1161 0.000000e+00 1.117028e+03 0.000000e+00 0.000000e+00 3905.476311
    2)             ENS00000150_tfb2m  771.3926 1.012137e+03 4.132779e-06 7.785302e+02 7.625490e+02  634.195429
...
    99)             ENS00000130_NONE  136.2607 1.658801e+00 1.498763e+02 2.733379e+00 0.000000e+00   64.313849
    100)            ENS00000124_NONE  606.0573 1.155628e+02 3.062783e+02 1.054907e+02 1.084090e+02  430.250175

               n3         n2         T1
1)   1.327292e+03 1.401719e+03 4230.5667240
2)   1.561575e-06 1.113367e-06  526.1571307
...
99)  1.511978e+02 1.240264e+02   68.4360589
100) 3.817887e+02 4.725010e+02  636.0279422

1 个答案:

答案 0 :(得分:2)

问题可能是heatmap.2需要数字矩阵,并且期望将rownames用作标签。但是,您可以从数据中完成此操作,而无需设置rownames。

首先,一些实际可重现的数据:

df <-
  data.frame(
    target_id__ext_gene = LETTERS
    , matrix(rnorm(26*6, 50, 5)
             , nrow = 26)
  )

然后,将数字部分作为矩阵传递给heatmap.2(没有标记列),并明确地传递标签:

heatmap.2(
  as.matrix(df[, -1])
  , labRow = df$target_id__ext_gene
)

产地:

enter image description here

您可以使用其他设置进一步修改。