【发布时间】:2018-10-05 14:28:03
【问题描述】:
我一直在寻找一个优雅的解决方案来解决这个问题,但无济于事。所以我决定在这里试一试。
我正在使用 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 包。有谁知道实现这一目标的优雅方法?
【问题讨论】: