2016-12-20 11 views
0

Я создал тепловую карту для 100 лучших дифференциально выраженных транскриптов с EnsembID и тремя образцами (RNA-seq -> kallisto -> сыщик).Символьная матрица к числовой матрице для тепловой карты

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) Сопрягаемая target_id от tmp_df с target_id из top_100new (содержащего ext_gene)

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

3) Объединенные столбцы target_id и ext_gene в столбце tmp_df (target_id__ext_gene вместо столбцов target_id и ext_gene)

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

4) Мне не удалось преобразовать «объединить» в числовую матрицу, потому что один столбец «target_id__ext_gene» имеет NA в некоторых строках, например. ENSEMBL00001_NA, поэтому я попытался заменить NA NONE.

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

5) Но все-таки я не могу преобразовать «объединить» в числовой матрице, так как столбец «target_id__ext_gene» имеет класс символов. Я пытался использовать

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

но он преобразует все строки столбца «target_id__ext_gene» в НС (NAs introduced by coercion)

Я знаю, что числовой объект может быть передан heatmap.2 и только там я застрял по причине один знак колонка.

Это как мои данные выглядит как с помощью воспроизведения (объединить):

    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

Пожалуйста, прочтите информацию о [как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) и как дать [воспроизводимый пример] (http://stackoverflow.com)/вопросы/5963269). Это облегчит вам помощь другим людям. – zx8754

+0

Нет необходимости в «шаге 1». – zx8754

+0

@ zx8754, я просто хотел дать полную информацию с самого начала. – gbioinfo

ответ

2

Вопрос, вероятно, что heatmap.2 требует числовой матрицы и ожидая, 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

Которые можно изменить с помощью других настроек.

+0

Я понимаю, что функция rnorm генерирует случайные числа, распределение которых является нормальным, но значение среднего значения равно 50, а sd равно 5. Для моих данных я не знаю значений для среднего и sd или мне нужно рассчитать. Или согласно [link] (cyclismo.org/tutorial/R/probability.html) mean и sd являются необязательными аргументами. Поэтому я использовал 'df <- unite (target_id__ext_gene = LETTERS, matrix (rnorm (100 * 9), nrow = 100))', потому что у меня есть 100 строк и 9 столбцов. Я получил эту ошибку: ** Ошибка в unite (target_id__ext_gene = LETTERS, matrix (rnorm (100 * 9),: неиспользуемый аргумент (target_id__ext_gene = LETTERS) ** – gbioinfo

+0

Я просто играл и смог сделать это без rnorm и с обновленным 'heatmap.2'. Здесь это'> heatmap.2 (log (as.matrix (unite [, -1]) + 1), labRow = объединить $ target_id__ext_gene, trace = "none", density.info = "none ", xlab = NULL, ylab = NULL, main =" Heatmap ", col = redgreen (75), margin = c (5.5, 8), scale =" row ", cexCol = 0.8, cexRow = 0.5)'. – gbioinfo

+0

построение 'df' было только для того, чтобы показать пример, который был необходим, потому что вы не предоставили воспроизводимые данные. Таким образом, он не будет (очевидно) соответствовать вашим фактическим данным. Также: да, то, что вы написали в комментарии, является расширением мой ответ, чтобы соответствовать вашим фактическим данным. Однако варианты, выходящие за рамки labRow', не являются частью MCVE вашей проблемы (поэтому я опустил их в своем ответе). –