在使用count()和factor()函数时,如何在R ggplot中使用动态声明的变量?

在使用count()和factor()函数时,如何在R ggplot中使用动态声明的变量?,r,dplyr,R,Dplyr,我想以更有效的方式使用ggplot绘制一些相对频率数据 我有很多感兴趣的变量,我想为每个变量绘制一个单独的条形图。以下是我当前感兴趣的一个变量的代码Gender: chart.gender <- data %>% count(Gender = factor(Gender)) %>% mutate(Gender = fct_reorder(Gender,desc(n))) %>% mutate(pct = prop.table(n)) %

我想以更有效的方式使用
ggplot
绘制一些相对频率数据

我有很多感兴趣的变量,我想为每个变量绘制一个单独的条形图。以下是我当前感兴趣的一个变量的代码
Gender

chart.gender <- data %>% 
     count(Gender = factor(Gender)) %>% 
     mutate(Gender = fct_reorder(Gender,desc(n))) %>% 
     mutate(pct = prop.table(n)) %>% 
     ggplot(aes(x=Gender, y=n, fill=Gender)) +
            geom_col()
这不会导致性别频率的三级因子计数图,而只是一个名为“性别”的列。我相信我明白了为什么它不起作用,但我不知道它的解决方案:我希望R检索我存储在
var
中的变量名,然后用它检索“data”中该变量的数据

通过一些研究,我发现了使用
as.name(var)
等建议,但将变量
var
声明为
count()函数中的一个因子似乎(至少)有问题

一些可复制的数据:

library(tidyverse)
library(ggplot2)

set.seed(1)
data <- data.frame(sample(c("Male", "Female", "Prefer not to say"),20,replace=TRUE))
colnames(data) <- c("Gender")
库(tidyverse)
图书馆(GG2)
种子(1)

数据使用
.data
代词将
var
作为变量的列子集

library(tidyverse)

var <- "Gender"
data %>% 
  count(var = factor(.data[[var]])) %>% 
  mutate(var = fct_reorder(var,desc(n))) %>% 
  mutate(pct = prop.table(n)) %>% 
  ggplot(aes(x=var, y=n, fill=var)) +
  geom_col()
如果在初始设置变量时使用
as.name()
,则可以使用!!(“bang-bang”)为
count()
步骤取消引用变量

var <- as.name("Gender")

chart.gender <- data %>% 
     count(var = factor(!! var)) %>% 
     mutate(var = fct_reorder(var,desc(n))) %>% 
     mutate(pct = prop.table(n)) %>% 
     ggplot(aes(x=var, y=n, fill=var)) +
     geom_col()
var%
变异(var=fct_重新排序(var,desc(n)))%>%
突变(pct=prop.table(n))%>%
ggplot(aes(x=var,y=n,fill=var))+
geom_col()

谢谢@stlba!这确实解决了问题。从逻辑上讲,
ggplot
现在有填充标签和x轴标签作为“var”,您能建议一种显示“性别”的方式吗?有没有比
labs(x=var,fill=var)
更微妙的方法?我会按照你的建议使用labs,我不确定是否有更直接的方法如果你对多个变量重复使用此代码,我会将代码保存为函数,这样你只需要运行
data%>%plot\u vars(“性别”)
或类似文件,而不是复制和粘贴代码。在这种情况下,为
labs()
增加一行代码并没有多大区别。谢谢Ronak,这是一个很好的解决方案!
data %>% 
  count(var = factor(!!sym(var))) %>% 
  mutate(var = fct_reorder(var,desc(n))) %>% 
  mutate(pct = prop.table(n)) %>% 
  ggplot(aes(x=var, y=n, fill=var)) +
  geom_col()
var <- as.name("Gender")

chart.gender <- data %>% 
     count(var = factor(!! var)) %>% 
     mutate(var = fct_reorder(var,desc(n))) %>% 
     mutate(pct = prop.table(n)) %>% 
     ggplot(aes(x=var, y=n, fill=var)) +
     geom_col()