【问题标题】:Tidyverse gather with rowdata from other data frameTidyverse 使用来自其他数据帧的行数据收集
【发布时间】:2018-10-05 14:28:03
【问题描述】:

我一直在寻找一个优雅的解决方案来解决这个问题,但无济于事。所以我决定在这里试一试。

我正在使用 tidyversegather 函数将包含来自不同样本的强度值的矩阵转换为长格式,以准备使用 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 包。有谁知道实现这一目标的优雅方法?

【问题讨论】:

    标签: r dplyr tidyr


    【解决方案1】:

    dplyr 中的*_join 函数(加载有tidyverse)非常适合解决涉及多个数据帧的大量问题。

    > df %>%
          gather(sample, value, -annot) %>%
          left_join(sample_info, by = 'sample')
    
      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
    

    【讨论】:

    • 这很棒,正是我想要的。非常感谢!
    猜你喜欢
    • 2020-01-24
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多