【问题标题】:r dplyr non standard evaluation - ordering bar plot in a functionr dplyr 非标准评估 - 在函数中排序条形图
【发布时间】:2017-08-03 07:25:35
【问题描述】:

我已阅读 http://dplyr.tidyverse.org/articles/programming.html 关于 dplyr 中的非标准评估,但仍然无法正常工作。

plot_column

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()

在禁用 mutate 语句时工作正常。但是,当启用它以便按高度对条进行排序时,只会返回一个条。

如何将上面的语句转换为函数 / 以使用变量但仍绘制多个按大小排序的条形图。

一个示例数据集可以是:

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()

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

【问题讨论】:

    标签: r function ggplot2 dplyr non-standard-evaluation


    【解决方案1】:

    这适用于 dplyr 0.7.0 和 ggplot 2.2.1:

    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

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

    【讨论】:

    • 它似乎还没有达到 100%。我仍然得到单个条的原始结果,而不是每组一个条。
    • 哦,对不起,让我检查一下!
    • 这很奇怪,我做了一个干净的 R 会话,它对我有用。我现在将它与包版本一起添加到代码中。
    • 谢谢。现在差不多了。但是对我来说,因子的排序现在还不能正常工作。
    • 是的,对于 mtcars 示例,它对我来说也不起作用。我收到一个警告,它看起来很混乱.. 我会在午休后尝试实施reorder..
    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2015-03-10
    • 2015-03-23
    相关资源
    最近更新 更多