繁体   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