2016-09-13 3 views
0

У меня есть набор данных с различными категориями. Скажем, A, B, C и D.Построение двух категорий в скрипте ggplot2 R

Вот как набор данных выглядит как

 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 не находится в категории B

(колонка V1 не является NA OR V2 колонка не является NA) находится в рубрике C

Все линии в этом dataframe находятся в категории D

В случае приведенного выше примера: Есть линии, которые попадают в А и С, в то же время (например, строка 3). Строка 1 будет в категориях B и C. Поэтому число категорий C может быть меньше числа A + B. Все 10 линий находятся в категории D.

Я хочу использовать ggplot2 для построения графика скрипки категорий A, B, C и D вместе в соответствии со значениями в V3. (Это A B C D по оси X и V3 по оси Y)

Есть ли у кого-нибудь подсказка? Я попытался, но 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 подмножества исходного набора данных и объединить четыре скрипичных участка вместе?

Большое спасибо!

+0

Это скорее относится к [datascience.se]. – phk

+0

Проведите данные через процессор, такой как 'awk', который добавляет столбец категории. Видимо, вы можете построить результат. Что-то вроде 'awk -f awkscript datafile | ggplot -' может работать – roaima

+0

Да, я могу добавить столбец группы. Но проблема в том, что категория C может пересекаться с A/B. Я не могу найти способ отображать элементы в категории A, а также в категории C, используя график скрипки ggplot2. –

ответ

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") 

Transformation:

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")))) 
+0

Привет, Бен, спасибо, что ответили! В вашем коде вы считаете, что категория C - это строки, которые как V1, так и V2 не являются NA? Но я хочу, чтобы категория C была (V1! = "NA" ** OR ** V2! = "NA"). Это означает, что могут быть перекрытия с категориями C и A/B. –

Смежные вопросы