如何在dplyr管道中引用data.frame变量.编程?

Jas*_*lns 5 r ggplot2 dplyr

library(ggplot2)
library(dplyr)
library(scales)

data <- data.frame(THEME_NAME = c(rep("A", 10), rep("B", 20), rep("C", 15)))

data %>%
  group_by(THEME_NAME) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n)) %>%
  # THE NEXT LINE !!! #
  ggplot(., aes(x = reorder(THEME_NAME, desc(freq)), y = freq)) +
    geom_bar(stat="identity") +
    scale_y_continuous(labels=percent)
Run Code Online (Sandbox Code Playgroud)

我怎么能以THEME_NAME编程方式参考?我可以做的.$THEME_NAME,但我想称之为.[1]select(., 1)或东西的性质是什么?

这样做的原因是我想在更大的上下文中使用这个管道 - 比如通过这个管道传递一堆因子变量.类似于:vars.to.plot <- sapply(data, is.factor)然后运行vars.to.plot通过此管道的每个元素.

Jas*_*lns 1

这里分享的想法很有用,但这就是我最终所做的:

library(ggplot2)
library(dplyr)
library(scales)

data <- data.frame(THEME_NAME   = c(rep("A", 10), rep("B", 20), rep("C", 15)),
                   THEME_NAME_2 = c(rep("E", 5), rep("F", 40)),
                   Non_Factor   = 1:45)

factor.vars <- sapply(data, is.factor)
varnames    <- names(data)[factor.vars]

myReorder <- function(x) {
  factor(x, levels=names(sort(table(x), decreasing=TRUE)))
}


for (i in seq_along(varnames)) {
  data[, varnames[i]] <- myReorder(data[, varnames[i]])
}


for (i in seq_along(varnames)) {
  print(ggplot(data, aes_string(x = varnames[i], y = "..count../sum(..count..)")) + 
          geom_histogram())
}
Run Code Online (Sandbox Code Playgroud)