我有一个看起来像这样的data.frame:
> foo
class type (0,10] (10,20] (20,30] (30,40]
1 A <NA> 0.6 0.2 0.1 0.1
2 B <NA> 0.7 0.1 0.1 0.1
3 C 1 0.5 0.4 0.1 0.0
4 C 2 0.5 0.3 0.1 0.1
5 D 1 0.7 0.3 0.0 0.0
6 D 2 0.7 0.2 0.0 0.1
7 E 1 0.4 0.3 0.2 0.1
8 E 2 0.5 0.3 0.1 0.1
我在课堂和课堂上融化输入并做一个条形图:
ggplot(melt(foo, id=c("class", "type")), aes(x=variable, y=value, fill=class)) +
geom_bar(position="dodge") +
facet_grid(type ~.)
事实上,facet_grid()
创建了3个图表,但我想要的是,以某种方式“忽略”A类和A类。 B是类型并在类型1和类型2的构面中显示它们,并且只获得2个图形(事实上,A和B值应该重复):
我尽量避免手动修改并使用类型1和2复制A和B,因为我需要原始data.frame,而不是其他图形/测试。
(对不起列的随机顺序,我在家里使用的版本比工作中的版本不同,不知道为什么会发生这种情况)
答案 0 :(得分:1)
由于ggplot
的理念,您将不得不进行数据复制:图中的每个项目都代表一个数据点。因此,如果您希望将NA
数据放在两个方面,则需要为每个原始数据项创建两个数据点。
如果您想避免仅为绘图显式创建临时数据,可以创建一个为您执行数据复制的函数。以下内容:
distribute.na.type <- function(dat) {
rbind(
transform(subset(dat, type %in% c(1, NA)), type=1),
transform(subset(dat, type %in% c(2, NA)), type=2)
)
}
以上示例未经测试且不是非常通用,但运气稍微好一点就可以了。像这样使用它:distribute.na.type(melt(...))
。