我有以下数据:
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
答案 0 :(得分:6)
Splice.Pair是一个因素。当您对数据框进行子集化时,该系数会保留其级别属性,该属性仍具有所有原始级别。只需将您的子集包装在droplevels
:
nc.subset <- droplevels(subset(nc.dat, proportion > 0.004))
更一般地说,如果您不喜欢使用因子自动保留这种级别,您可以设置R将字符串存储为字符向量而不是默认设置的因素:
options(stringsAsFactors = FALSE)
在你的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
}
但是,当然,最好的解决方案仍然是升级到最新版本的R。
答案 1 :(得分:1)
检查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
,但这是为了找到您: - )