2016-07-25 4 views
1

Я использую R студии в Ubuntu со стандартным обновленным R и ggplot2R ggplot2 используя ..count .. при использовании facet_grid

Я пытаюсь создать гистограмму в ggplot, и разделение данных по группам.

Мне нужна ось графика, чтобы указать частоту каждого бункера в подгруппе, которая была разделена сеткой фасет.

, например, если у меня есть две записи в данных

a group 
1 1 
2 2 

мне нужно использовать facet_grid, чтобы разделить на группы, а затем, чтобы показать, что имеет одну планку 1, что составляет 100% процентов примеров в группе 1 и наоборот.

Я узнал, что способ сделать это, используя (..count ..)/sum (.. count) , но сумма (.. count.) Будет считать частоту того, что было во всем кадр данных и дадут мне нежелательные результаты,

я не могу найти хорошую документацию для глубокого использования ..count ..

question about special ggplot variables

another question about ..count..

Там нет ничего всеобъемлющего в docs,

Это пример кода я использую

df <- data.frame(a = 1:10, b = 1:10, group = c(rep(1,5),rep(2,5))) 
p<-ggplot(df) + geom_histogram(aes(x = a, y = (..count..)/sum(..count..))) + 
    facet_grid(group ~ .) 

Вы можете видеть, что ось у будет содержать 0,1 как высшую ценность, я хотел бы, чтобы показать, что 100% процентов от 1 значений в например, группа 1. и т.д.

редактировать:

Благодаря Jimbou за ответ и ссылки на хорошо построен прогулку вокруг, который подходит для дискретных данных, пожалуйста, обратите внимание, что реальная проблема я имею здесь нужно будет использовать непрерывные данные, и ящики, которые группируют более одного значения, кроме того, нет надлежащей документации о том, как это сделать с функцией ..count .. и поэтому я считаю, что это важно найти решение, а не использовать прогулку вокруг

+0

Вы можете использовать? ggplot (df, aes (x = a)) + geom_histogram() + facet_grid (group ~.) – Jimbou

+0

производит тот же результат, здесь проблема заключается в шкале на оси y и способе, которым ..count .. подсчитывает различные части данных. @Jimbou – thebeancounter

+0

Зачем вам нужны пропорции членства в группе, если они все в одной группе для каждой переменной. – shayaa

ответ

1

После много играть вокруг, и очень хорошие направления, вы все дали, я обнаружил, что с небольшим добавлением и смешайте между Jimbou-х и ответы Shayaa, и некоторым дополнительным кодом это работает прекрасно.

t <- data %>% group_by(group,member,v_rate) %>% tally %>% mutate(f = n/sum(n)) 

будет принимать группу в данных и группой, членом, v_rate, и добавить количество каждой группы, деленная на сумму (относительно частоты в группе)

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

p <- ggplot(t, aes(x = v_rate, weight = f)) + geom_histogram() + facet_grid(group ~ member) 

, который прекрасно работает.

1

Вы можете попробовать:

Сначала вычислите длину каждой группы, используя ave :

df$gr_l <- ave(df$a, df$group, FUN = function(x) length(x)) 

Получить долю каждого a внутри групп с помощью by:

df$gr_prop <- c(by(df, df$group + df$a, FUN = function(x) length(x$a)/unique(x$gr_l))) 

Участок данных.

ggplot(df, aes(x=a, y=gr_prop)) + 
     geom_bar(stat="identity",position='dodge') + 
     facet_grid(group ~ .) 

Вопрос похож на this и that вопрос, используя ddply или внутренний ggplot решение.

+0

вопрос не является дубликатом, ваш ответ относится к дискретным данным, и он не будет работать для непрерывных данных ... и я знаю, что я могу обойти проблему и разделить данные, а затем суммировать и перегруппировать, но основные идея заключалась в том, чтобы понять, как работает ..count .. потому что для таких случаев нет надлежащей документации, поэтому это важный отдельный вопрос. – thebeancounter

+0

Я думаю, что вы просто использовали бы .. плотность .. в этом случае. – shayaa

+0

@shayaa снова, такая же проблема, будет проверять плотность по сравнению со всеми данными, мне нужно ее вычислить внутри группы, которая была разделена сеткой фасет – thebeancounter

2

Адрес dplyr.

df%>% group_by(group)%>%mutate(n = n(), prop = n/sum(n)) 
+0

Это выглядит многообещающим, не могли бы вы предоставить более подробную информацию? – thebeancounter

+0

хорошо, если вы хотите изучить dplyr, есть отличная виньетка. В принципе, '%>%' - это оператор трубопровода, который можно интерпретировать как «и затем». Сначала группируйте кадр данных по группам, а затем добавьте столбец, который подсчитывает вхождения в группе, затем вычисляет другой столбец, который принимает это значение внутри группы, и вычисляет пропорцию путем деления на общее число. – shayaa

+0

, пожалуйста, предоставьте более подробный ответ, чтобы я мог принять его в качестве ответа ... но до этого он отлично подходит для работы с дискретными vaiables, но опять же, как это помогает нам с ggplot и делает ось оси для относительного частота каждого бункера в подгруппе, созданной сеткой фасетов? – thebeancounter

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