给出这样的数据框:
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
是餐馆。
我想在x轴上创建一个barplot
每种类型的付款,条形的高度表示接受该付款类型的餐馆数量。有任何想法吗?
答案 0 :(得分: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()
,默认情况下条形的高度表示数据框中的个案数。因此,我将使用tidyr包中的gather
重新格式化为长数据帧,然后过滤掉餐馆不接受该方法的任何情况。生成的数据框将包含restuarant id的列,每个餐厅接受的每种付款方式都有一行。
> 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轴上使用方法绘图,请在x=method
中设置aes()
。
> ggplot(df_long, aes(x=method)) +
+ geom_bar()