我正在尝试在ggplot2中创建一个条形图,它将x轴上的输出限制为前10%最常见的分类变量。
我的数据框是一个包含个人贷款统计数据的数据集。我正在研究贷款状况和职业这两个类别之间的关系。
首先,我想将贷款状态限制为已经被收取的贷款。"接下来,我想绘制使用条形图在各种职业中收取多少贷款的情节。职业有67个独特的值 - 我想将情节限制为最常用的职业(按整数或百分比,即" 7"或" 10%"工作)。 / p>
在下面的代码中,我使用forcats函数setZ
按频率按降序排列条形图。但是,我找不到一个限制x轴类别数量的函数。我已尝试使用fct_infreq
,quantile
等,但这些似乎不适用于分类数据。
感谢您的帮助!
scale_x_discrete
结果错误:
(1 - h)中的错误* qs [i]:二元运算符的非数字参数
更新 使用Yifu的答案,我能够得到所需的输出:
df %>% filter(LoanStatus %in% c("Chargedoff")) %>%
ggplot() +
geom_bar(aes(fct_infreq(Occupation)), stat = 'count') +
scale_x_discrete(limits = c(quantile(df$Occupation, 0.9), quantile(df$Occupation, 1)))
答案 0 :(得分:0)
您可以在dplyr
中执行此操作:
#only use cars whose carb appears more than 7 times to create a plot
mtcars %>%
group_by(carb) %>%
mutate(group_num = n()) %>%
# you can substitute the number with 10% percentitle or whatever you want
dplyr::filter(group_num >= 7) #%>%
#ggplot()
#create your plot
我们的想法是过滤观察结果并将其传递给ggplot
,而不是过滤ggplot
中的数据。