这是如何将ggplot和dplyr组合成一个函数的后续操作?.
问题是,如何编写一个使用的函数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
Run Code Online (Sandbox Code Playgroud)
如您所见,分组变量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)
Run Code Online (Sandbox Code Playgroud)
将输出一个具有分组变量连续比例的图表,这是不希望的.
理想情况下,我想在运行中定义因子变量.也就是说,在函数中有这样的东西:
ggplot(df_agg, aes_q(x = quote(count),
y = quote(mean),
color = factor(quo_var),
group = factor(quo_var))) +
geom_point() +
geom_line()
Run Code Online (Sandbox Code Playgroud)
这当然不起作用.
问题是:这里可以做些什么?
谢谢!!
这是使用其他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()
}
Run Code Online (Sandbox Code Playgroud)
我们factor(group)使用expr()函数构建表达式.我们用来get_expr()从quosure中提取符号名称"group" quo_var.一旦我们构建了表达式,我们就可以将其传递给aes_q.
希望ggplot很快就会整齐友好,这将不再是必要的.