![](/img/trans.png)
[英]tidyverse: removing rows from data frame on basis of values in other rows
[英]Tidyverse gather with rowdata from other data frame
我一直在尋找相當長的時間來找到解決該問題的優雅方法,但無濟於事。 所以我決定在這里試一試。
我使用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軟件包。 有人知道實現此目標的優雅方法嗎?
在*_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.