2015-03-24 3 views
0

Мой кадр данных выглядит следующим образом:раскол кадр данных и создать стек процентов barplot в R

plant distance 
one  1 
one  3 
one  2 
one  3 
one  7 
one  4 
one  6 
one  8 
one  9 
two  1 
two  6 
two  4 
two  8 
two  5 
two  3 
three …… 

Я хочу разделить distance каждого уровня на группы по интервалам (например, интервал = 3).

plant distance group 
    one  1 1 
    one  3 1 
    one  2 1 
    one  3 1 
    one  7 3 
    one  4 2 
    one  6 2 
    one  8 3 
    one  9 3 
    two  1 1 
    two  6 2 
    two  4 2 
    two  8 3 
    two  5 2 
    two  3 1 
    three …… 

И вычислить процент каждой группы

plant group percentage 
one  1  0.44 
one  2  0.22 
one  3  0.33 
two  1  0.33 
two  2  0.50 
two  3  0.17 
three …… 

Наконец, участок проценты каждого уровня каждой группы аналогично, как это: enter image description here

, и я не знаю, как разделить каждый уровень за интервал. Извините за мой английский! Спасибо за помощь!

+0

Что именно вы хотите? Что вы пробовали? Например, вы можете разделить свой фрейм данных с помощью 'split (my_data $ distance, my_data $ plant)', вы можете сгруппировать его по 'cut (my_data $ distance, breaks = seq (min (my_data $ distance), max (my_data $ distance), 3)) 'и т. д. – lukeA

+0

@ lukeA Спасибо за ваш ответ, я много раз пробовал, и я обновил сообщение. –

ответ

1

Вот один из способов сделать это с помощью dplyr:

library(dplyr) 
library(ggplot2) 
my_data %>% 
    mutate(group = factor(cut(distance, seq(0, max(distance), 3), F))) %>% 
    group_by(plant, group) %>% 
    summarise(percentage = n()) %>% 
    mutate(percentage = percentage/sum(percentage)) %>% 
    ggplot(aes(x = plant, y = percentage, fill = group)) + 
    geom_bar(stat = "identity", position = "stack") 

enter image description here

+0

Благодарим вас за решение, и оно эффективно. Я получил сообщение об ошибке: 'ggplot2 не знает, как обращаться с данными класса uneval'. Не могли бы вы немного рассказать о «%>%», «group_by» и «mutate»? –

+1

'mutate'' 'my_data $ group <- factor (cut (my_date $ distance, seq (0, max (my_data $ distance), 3), F)))'. 'group_by' группирует набор данных для' summaryise'. '%>%' передает my_data из операции в операцию, если вы хотите это сделать. Вы найдете много информации по google'ing. Я использую dplyr_0.4.0 и ggplot2_1.0.0 - код работает здесь с вашими данными примера. – lukeA

+0

Мы использовали символ '%>%' для операций цепочки и как разбить цепочку и сохранить график? –

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