ggplot2条形图的子集data.frame

ggplot2条形图的子集data.frame,r,ggplot2,R,Ggplot2,我有以下数据: 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.

我有以下数据:

    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();
nc.0.004)
qplot(Splice.Pair,proporty,data=nc.dat.subset,geom=“bar”,xlab=“Splice Pair”,ylab=“总非规范拼接位点的比例”)+coord_flip();
但这只是给了我一个Y轴上所有拼接对的条形图,除了过滤掉的拼接对缺少条。


我不知道发生了什么,让所有类别仍然存在:s

发生的是拼接。成对是一个因素。当对数据帧进行子集时,因子将保留其“级别”属性,该属性仍具有所有原始级别。您可以通过简单地将您的子集包装在
液滴层中来避免此类问题:

nc.subset <- droplevels(subset(nc.dat, proportion > 0.004))
在R会话开始时(也可以作为选项传递给
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
}
函数(x,除=NULL,…)
{

ix检查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();
nc.0.004)

nc.subset$Splice.Pair感谢您的解释。但是,我似乎没有函数droplevels…@kikumbob-它是在a中添加的(现在不是很新)我相信是R更新,2.12.0。我会检查您正在运行升级的版本。如果您不能,则在
gdata
包中有一个类似的名为
drop.levels
的函数。正确答案为+1。但我个人认为更改
选项是不明智的,因为这意味着您的代码变得不可移植o其他。@joran:
droplevels
只是
droplevels.factor
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();