2016-12-20 3 views
-1

Учитывая кадр данных, как это:barplot с несколькими colums как оси х

IDPLACES AMERICAN.EXPRESS VISA MASTERCARD CASH 
201220     0 1   0 1 
201321     1 1   1 1 
201422     0 0   0 1 
201525     1 1   1 1 

IDPLACES рестораны.

Я хочу создать barplot с каждым видом оплаты по оси x с высотой баров, указывающей количество ресторанов, принимающих этот вид оплаты. Есть идеи?

+0

'barplot (colSums (г [-1]))' – user20650

+0

Спасибо! Но, я должен создать его с ggplot2, и когда я запустил этот – Lilian

+0

ggplot() + geom_bar (x = colSums (платеж [, -1])) – Lilian

ответ

0

Сделайте рамку данных.

df <- data.frame(idplaces = c("201220","201321","201422","201525"), 
       Amex = c(0,1,0,1), 
       visa = c(1,1,01,1), 
       mastercard = c(0,1,0,1), 
       cash = c(1,1,1,1)) 

Во-первых, вам нужно переформатировать данные (что часто бывает в случае ggplot2). Способ переформатировать его зависит от того, как вы собираетесь его запечатлеть. Я буду использовать geom_bar(), который по умолчанию имеет высоту баров, представляет количество случаев в кадре данных. Поэтому я переформатирую на длинный фрейм данных, используя gather из пакета tidyr, а затем отфильтруйте все случаи, когда ресторан не принимает этот метод. Результирующий блок данных будет содержать столбцы для идентификатора restuarant и одну строку для каждого метода оплаты, который принимает каждый ресторан.

> df_long <- df %>% 
+ gather("method", "accepts", -idplaces, factor_key = TRUE) %>% 
+ filter(accepts == 1) 

> df_long 
    idplaces  method accepts 
1 201321  Amex  1 
2 201525  Amex  1 
3 201220  visa  1 
4 201321  visa  1 
5 201422  visa  1 
6 201525  visa  1 
7 201321 mastercard  1 
8 201525 mastercard  1 
9 201220  cash  1 
10 201321  cash  1 
11 201422  cash  1 
12 201525  cash  1 

Для построения с методами на оси х, установить x=method в aes().

> ggplot(df_long, aes(x=method)) + 
    + geom_bar() 

enter image description here

+0

Большое спасибо! Действительно, он работает как шарм :) – Lilian

+0

@Lilian; если решение Розы ответит на ваш вопрос, вы можете нажать галочку, чтобы отметить его. – user20650