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();