ggplot + dplyr неправильно складывает данные или удаляет данные

Я пытаюсь построить столбчатую диаграмму с накоплением, и по какой-то причине мои столбцы складываются неправильно. Стеки не в порядке, а цвета объединены. Я не совсем понимаю, как решить проблему

g12<-terror %>% 
group_by(attacktype1_txt,iyear,nkillter) %>% 
ggplot(aes(x=iyear,y=nkillter,fill=attacktype1_txt)) +
geom_bar(stat='identity',position='stack')  + xlab('Year of Attack') + 
ylab('Number of Deaths')
g12=g12+ guides(fill=guide_legend(title="Attack Types"))
g12

или когда я пытаюсь использовать функцию суммирования, чтобы сложить столбцы правильно, я получаю эту странность

g12<-terror %>% 
group_by(attacktype1_txt,iyear,nkillter) %>% summarise(number=n()) %>% 
ggplot(aes(x=iyear,y=nkillter,fill=attacktype1_txt)) +
geom_bar(stat='identity',position='stack')  + xlab('Year of Attack') + 
ylab('Number of Deaths')
g12=g12+ guides(fill=guide_legend(title="Attack Types"))
g12

Это приводит к тому, что график правильно сложен, но, как вы можете видеть, сравнивая два, он выбросил много данных. Есть ли какая-то функция, которую я мог бы использовать, которая по-прежнему будет консолидировать данные, не выбрасывая данные, как кажется?


person BaconBoi    schedule 20.05.2017    source источник
comment
Вам необходимо предоставить нам некоторые данные, чтобы попытаться воссоздать вашу проблему.   -  person nathaneastwood    schedule 20.05.2017
comment
Это набор данных drive.google.com/file/d/0BzgRASyCPi42RDdKY25adVZoWFk/.   -  person BaconBoi    schedule 20.05.2017


Ответы (1)


Я думаю, что первый фрагмент кода работает. Конечно, вы можете упростить его:

ggplot(terror, aes(iyear, nkillter)) + 
geom_bar(aes(fill = attacktype1_txt), stat = "identity") +
    xlab('Year of Attack') + ylab('Number of Deaths') + 
    guides(fill=guide_legend(title="Attack Types"))

введите здесь описание изображения

Но это, кажется, правильное представление данных, если я правильно понимаю. Просто чтобы проверить себя, давайте проверим 2015 год:

> (terror %>% select(iyear, attacktype1_txt, nkillter) %>% 
              arrange(attacktype1_txt, nkillter) %>%
              filter(iyear==2015, nkillter > 0))
       iyear                     attacktype1_txt nkillter
    1   2015                       Armed Assault        1
    2   2015                       Armed Assault        1
    3   2015                       Armed Assault        1
    4   2015                       Armed Assault        1
    5   2015                       Armed Assault        1
    6   2015                       Armed Assault        2
    7   2015                   Bombing/Explosion        1
    8   2015                   Bombing/Explosion        1
    9   2015                   Bombing/Explosion        1
    10  2015                   Bombing/Explosion        1
    11  2015                   Bombing/Explosion        2
    12  2015 Hostage Taking (Barricade Incident)        1
    13  2015 Hostage Taking (Barricade Incident)        2
    14  2015         Hostage Taking (Kidnapping)        3

Как показано на графике, у нас есть 7 смертей от вооруженных нападений, 6 бомбардировок/взрывов, 3 баррикады и 3 похищения.

person Yuval Spiegler    schedule 21.05.2017
comment
Это действительно странно. Точно такой же код приводит к выводу этого графика i.imgur.com/wHUIhjR.png - person BaconBoi; 22.05.2017
comment
хм .. какую версию ggplot вы используете? - person Yuval Spiegler; 22.05.2017