在ggplot2小提琴R

时间:2016-09-13 08:02:21

标签: r

我有一个包含不同类别的数据集。比方说A,B,C和D.

以下是数据集的外观

        V1   V2    V3
    1   NA    1   0.1
    2    2    2   0.2
    3    3   NA   0.1
    4    4    4   0.3
    5   NA   NA   0.4
    6   NA   NA   0.8
    7    7    7   0.2
    8   NA    8   0.1
    9    9   NA   0.6
    10  NA   NA   0.1

以下行:

V1列不是NA属于A类

V2列不是NA属于B类

(V1列不是NA OR V2列不是NA)属于C类

此数据框中的所有行都在D类

在上面的示例中:有些行同时落入A和C(如第3行)。线1将在类别B和C中。因此,类别C的数量可以小于A + B的数量。所有10行都属于D类。

我想用ggplot2根据V3中的值一起绘制A,B,C和D类的小提琴图。 (即X轴为A B C D,Y轴为V3)

有人有提示吗?我试过但ggplot2似乎无法处理重叠的类别。如果数据有另一列指定了类别,那么它可以正常工作:

        V1   V2    V3    Group
    1   NA    1   0.1        B
    2    2    2   0.2        C
    3    3   NA   0.1        A
    4    4    4   0.3        C
    5   NA   NA   0.4        D
    6   NA   NA   0.8        D
    7    7    7   0.2        C
    8   NA    8   0.1        B
    9    9   NA   0.6        A
    10  NA   NA   0.1        D

将有4把小提琴,但在每个小提琴中,只有该类别中的条目。重叠的不会被考虑在内。

有没有办法在ggplot2中绘制重叠类别?或者有没有办法将不同数据框架中的不同类别绘制成一个小提琴情节?或者您是否建议绘制原始数据集的4个子集并将四个小提琴图组合在一起?

非常感谢!

1 个答案:

答案 0 :(得分:0)

构建所需的类别相当容易。

数据:

dd <- read.table(text="
   NA    1   0.1
    2    2   0.2
    3   NA   0.1
    4    4   0.3
   NA   NA   0.4
   NA   NA   0.8
    7    7   0.2
   NA    8   0.1
    9   NA   0.6
   NA   NA   0.1")

转型:

dd$Group <- with(dd,
  ifelse(is.na(V1) & is.na(V2),"D",
         ifelse(!is.na(V1) & !is.na(V2),"C",
                ifelse(is.na(V1),"B","A"))))