r dplyr非标准评估 - 功能中的排序条形图

问题描述:

我已阅读http://dplyr.tidyverse.org/articles/programming.html关于dplyr中的非标准评估,但仍无法使事情发挥作用。r dplyr非标准评估 - 功能中的排序条形图

plot_column < - “columnA”

raw_data %>% 
    group_by(.dots = plot_column) %>% 
    summarise (percentage = mean(columnB)) %>% 
    filter(percentage > 0) %>% 
    arrange(percentage) %>% 
    # mutate(!!plot_column := factor(!!plot_column, !!plot_column))%>% 
    ggplot() + aes_string(x=plot_column, y="percentage") + 
    geom_bar(stat="identity", width = 0.5) + 
    coord_flip() 

当发生变异语句是禁用工作正常。但是,启用它时,为了按高度排列酒吧,只返回一个酒吧。

如何将上面的语句转换为函数/使用变量,但仍然绘制按其大小排序的多个小节。

一个实例的数据集可以是:

columnA,columnB 
a, 1 
a, 0.4 
a, 0.3 
b, 0.5 

编辑

样品:

mtcars %>% 
    group_by(mpg) %>% 
    summarise (mean_col = mean(cyl)) %>% 
    filter(mean_col > 0) %>% 
    arrange(mean_col) %>% 
    mutate(mpg := factor(mpg, mpg))%>% 
    ggplot() + aes(x=mpg, y=mean_col) + 
    geom_bar(stat="identity") 
    coord_flip() 

将输出的有序条形图。 如何将其包裹到可以替换列的函数中,并且获得多个酒吧?

这适用于dplyr 0.7.0和2.2.1 ggplot:

rm(list = ls()) 
library(ggplot2) 
library(dplyr) 
raw_data <- tibble(columnA = c("a", "a", "b", "b"), columnB = c(1, 0.4, 0.3, 0.5)) 

plot_col <- function(df, plot_column, val_column){ 

    pc <- enquo(plot_column) 
    vc <- enquo(val_column) 
    pc_name <- quo_name(pc) # generate a name from the enquoted statement! 

    df <- df %>% 
    group_by(!!pc) %>% 
    summarise (percentage = mean(!!vc)) %>% 
    filter(percentage > 0) %>% 
    arrange(percentage) %>% 
    mutate(!!pc_name := factor(!!pc, !!pc)) # insert pc_name here! 

    ggplot(df) + aes_(y = ~percentage, x = substitute(plot_column)) + 
    geom_bar(stat="identity", width = 0.5) + 
    coord_flip() 
} 
plot_col(raw_data, columnA, columnB) 
plot_col(mtcars, mpg, cyl) 

问题,我跑进是那种ggplot和dplyr使用不同种类的非标评价。我在这个问题上得到了答案:Creating a function using ggplot2

编辑:参数化值列(例如columnB/cyl)并添加mtcars示例。

+0

它似乎还没有100%。我仍然得到单个酒吧的原始结果,而不是每个组的一个酒吧。 –

+0

哦对不起,让我检查! – friep

+0

这很奇怪,我做了一个R的干净的会议,它为我工作。现在我将这些代码与包版本一起添加到代码中。 – friep