gpt4 book ai didi

r - 如何使用 ggplot 和 dplyr 从函数中的 quosures 创建因子变量?

转载 作者:行者123 更新时间:2023-12-04 12:33:35 25 4
gpt4 key购买 nike

这是来自 how to combine ggplot and dplyr into a function? 的跟进.

问题是,如何编写一个使用 dplyr 的函数。 , ggplot并可能指定来自 quosures 的因子变量?

这是一个例子

dataframe <- data_frame(id = c(1,2,3,4,5,6),
group = c(1,1,0,0,3,4),
value = c(200,400,120,300,100,100))

# A tibble: 6 x 3
id group value
<dbl> <dbl> <dbl>
1 1 1 200
2 2 1 400
3 3 0 120
4 4 0 300
5 5 3 100
6 6 4 100

如您所见,分组变量 group这里是数字,所以
get_charts1 <- function(data, mygroup, myoutput){

quo_var <- enquo(mygroup)
quo_output <- enquo(myoutput)

df_agg <- data %>%
group_by(!!quo_var) %>%
summarize(mean = mean(!!quo_output, na.rm = TRUE),
count = n()) %>%
ungroup()

ggplot(df_agg, aes_q(x = quote(count), y = quote(mean), color = quo_var, group = quo_var)) +
geom_point() +
geom_line()
}

get_charts1(dataframe,
mygroup = group,
myoutput = value)

将为分组变量输出一个具有连续刻度的图表,这是不需要的。

enter image description here

理想情况下,我想即时定义因子变量。也就是说,在函数中有这样的东西:
 ggplot(df_agg, aes_q(x = quote(count), 
y = quote(mean),
color = factor(quo_var),
group = factor(quo_var))) +
geom_point() +
geom_line()

这当然不起作用。

问题是:这里可以做什么?

谢谢!!

最佳答案

这是使用其他 rlang 函数的可能性。

get_charts1 <- function(data, mygroup){

quo_var <- enquo(mygroup)

df_agg <- data %>%
group_by(!!quo_var) %>%
summarize(mean = mean(value, na.rm = TRUE),
count = n()) %>%
ungroup()

cc <- rlang::expr(factor(!!(rlang::get_expr(quo_var))))
# or just cc <- expr(factor(!!get_expr(quo_var))) if you include library(rlang)

ggplot(df_agg, aes_q(x = quote(count), y = quote(mean), color = cc)) +
geom_point() +
geom_line()
}

我们构建表达式 factor(group)使用 expr()功能。我们使用 get_expr()从 quosure quo_var 中提取符号名称“group” .一旦我们构建了表达式,我们就可以将它传递给 aes_q .

希望 ggplot 很快就会对 tidy-eval 友好,这将不再是必要的。

关于r - 如何使用 ggplot 和 dplyr 从函数中的 quosures 创建因子变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45826042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com