1

我有一个如下所示的 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 类和 B 类是类型,并在类型 1 和类型 2 的方面显示它们,并且只得到 2 个图表(A 和 B 值事实上,应该重复):

在此处输入图像描述

我尽量避免手动修改并使用类型 1 和 2 复制 A 和 B,因为我需要原始 data.frame,就像其他图形/测试一样。

(抱歉列的随机顺序,我在家使用的版本与工作中的不同,不知道为什么会这样)

4

1 回答 1

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

于 2013-07-23T19:40:26.020 回答