r - 使用 count() 和 factor() 函数时,如何在 R ggplot 中使用动态声明的变量?
问题描述
我想以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()
这有效,但变量Gender
重复了很多次。由于我需要使用类似的代码为许多感兴趣的变量(性别、年龄、位置等)重复绘图,我想通过在顶部声明一次感兴趣的变量并将该声明的变量用于其余部分来简化这一点编码。直观地说,类似:
var <- "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()
这不会导致性别频率的三级因子计数图,而只是一个名为“性别”的列。我相信我明白它为什么不起作用,但我不知道它的解决方案:我希望 R 检索我存储在 中的变量名var
,然后使用它来检索“数据”中该变量的数据。
通过一些研究,我发现了类似 using 的建议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")
我在 R 中使用以下包:tidyverse
,ggplot2
解决方案
使用代词将具有as 变量.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()
或者另一种方式是使用sym
和!!
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()
推荐阅读
- javascript - 将 onClick 按钮元素反应为 javascript 节点
- html - 试图在一个 div 中居中一个 div
- qml - 将 MouseArea 事件从父级传播到子级
- node.js - 从 node/express 对文件调用 OS 命令
- amazon-web-services - Amazon Elastic Beanstalk ebextension 将 nginx 配置参数添加到默认配置中
- vue.js - 选择下一个/上一个项目并将其放在织物 js 的前面
- terraform - 使用 terraform.workspace 选项时,Terraform 插值抛出错误
- spring - 如何保护 Spring Security 中受 IP 地址限制的匿名访问?
- c# - Amazon S3 存储桶 C# API 未捕获错误
- c# - Npgsql 4.0 参数和空值