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通过此管道的每个元素.
这里分享的想法很有用,但这就是我最终所做的:
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)