簡體   English   中英

ggplot2 條形圖的子集 data.frame

[英]subset data.frame for ggplot2 bar chart

我有以下數據:

    Splice.Pair  proportion
1         AA-AG 0.010909091
2         AA-GC 0.003636364
3         AA-TG 0.003636364
4         AA-TT 0.007272727
5         AC-AC 0.003636364
6         AC-AG 0.003636364
7         AC-GA 0.003636364
8         AC-GG 0.003636364
9         AC-TC 0.003636364
10        AC-TG 0.003636364
11        AC-TT 0.003636364
12        AG-AA 0.010909091
13        AG-AC 0.007272727
14        AG-AG 0.003636364
15        AG-AT 0.003636364
16        AG-CC 0.003636364
17        AG-CT 0.007272727
...       ...   ...

我想獲得一個條形圖,可視化每個拼接對的比例,但僅適用於比例超過 0.004 的拼接對。 我嘗試了以下方法:

nc.subset <- subset(nc.dat, proportion > 0.004)
qplot(Splice.Pair, proportion, data=nc.dat.subset,geom="bar", xlab="Splice Pair", ylab="Proportion of total non-canonical splice sites") + coord_flip();

但這只是給了我一個條形圖,其中包含 Y 軸上的所有拼接對,除了被過濾掉的拼接對是缺失的條形圖。在此處輸入圖像描述

我不知道發生了什么讓所有類別仍然存在:s

發生的事情是 Splice.Pair 是一個因素。 當您對數據框進行子集化時,該因子將保留其級別屬性,該屬性仍然具有所有原始級別。 您可以通過簡單地將子集包裝在droplevels中來避免此類問題:

nc.subset <- droplevels(subset(nc.dat, proportion > 0.004))

更一般地說,如果您不喜歡這種自動保留因子級別,您可以設置 R 以將字符串存儲為字符向量而不是默認情況下的因子,方法是:

options(stringsAsFactors = FALSE)

在 R session 的開頭(這也可以作為選項傳遞給data.frame )。

編輯

關於運行可能缺少droplevels的舊版本 R 的問題,@rcs 在評論中指出,單因素的方法很容易自己實現。 數據幀的方法只是稍微復雜一點:

function (x, except = NULL, ...) 
{
    ix <- vapply(x, is.factor, NA)
    if (!is.null(except)) 
        ix[except] <- FALSE
    x[ix] <- lapply(x[ix], factor)
    x
}

但當然,最好的解決辦法還是升級到最新版本的R。

檢查 Splice.Pair 是否是一個因素。 如果是這種情況,請使用droplevels()刪除不再用於解決問題的級別。

nc.subset <- subset(nc.dat, proportion > 0.004)
nc.subset$Splice.Pair <- droplevels(nc.subset$Splice.Pair)
qplot(Splice.Pair, proportion, data=nc.dat.subset,geom="bar", xlab="Splice Pair", ylab="Proportion of total non-canonical splice sites") + coord_flip();

您也許可以將droplevels合並到qlot中,但那是您自己找到的:-)

暫無
暫無

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

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