簡體   English   中英

Tidyverse從其他數據框中收集行數據

[英]Tidyverse gather with rowdata from other data frame

我一直在尋找相當長的時間來找到解決該問題的優雅方法,但無濟於事。 所以我決定在這里試一試。

我使用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軟件包。 有人知道實現此目標的優雅方法嗎?

*_join從功能dplyr (裝有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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM