Я довольно долго искал элегантное решение этой проблемы, но безрезультатно.Поэтому я решил попробовать.
Я использую tidyverse
и функцию gather
для преобразования матрицы, содержащей значения интенсивности из разных выборок, в длинный формат при подготовке к построению с помощью ggplot.
Существует два типа аннотаций.«Основанная на строке» аннотация данных, соответствующих генам, и «основанная на столбцах» аннотация, соответствующая образцу информации.Информация на основе столбцов хранится в отдельном фрейме данных.
Используя gather
, можно легко подготовить значения и аннотации на основе строк к длинному формату.
> df <- data.frame(annot=c("A", "B", "C", "D"), sample1=c(1,1,4,2), sample2=c(3,5,4,5))
> df
annot sample1 sample2
1 A 1 3
2 B 1 5
3 C 4 4
4 D 2 5
> df %>% gather(sample, value, -annot)
annot sample value
1 A sample1 1
2 B sample1 1
3 C sample1 4
4 D sample1 2
5 A sample2 3
6 B sample2 5
7 C sample2 4
8 D sample2 5
Пример информацииболее сложно.Он хранится в отдельном фрейме данных:
> sample_info <- data.frame(sample=c("sample1", "sample2"), condition=c("infected", "uninfected"))
> sample_info
sample condition
1 sample1 infected
2 sample2 uninfected
Желаемый конечный результат будет выглядеть следующим образом:
annot sample value condition
1 A sample1 1 infected
2 B sample1 1 infected
3 C sample1 4 infected
4 D sample1 2 infected
5 A sample2 3 uninfected
6 B sample2 5 uninfected
7 C sample2 4 uninfected
8 D sample2 5 uninfected
Я могу добиться этого путем пост-обработки данныхфрейм, в котором я сопоставляю имя-образца с условием строка за строкой после генерации длинного фрейма данных.Я ищу более точное решение, в идеале использующее пакет Tidyverse.Кто-нибудь знает элегантный способ добиться этого?