繁体   English   中英

dplyr 0.7-将分组变量指定为字符串

[英]dplyr 0.7 - Specify grouping variable as string

我有一些指定为字符串的变量名(例如,来自Shiny应用程序的输入),我想在我的dplyr和ggplot2代码中使用它们,就像它们是变量一样。

我通过反复试验使它起作用,但是我觉得必须有更好的方法。 有什么更好的方法来执行这些操作?

library(rlang)
library(ggplot2)
library(dplyr)

someString <- "g1"

df <- tibble(
  g1 = c(1, 1, 2, 2, 2),
  g2 = c(1, 2, 1, 2, 1),
  a = sample(5), 
  b = sample(5)
)

my_summarise <- function(df, group_var) {
  print(group_var)

  df %>%
    group_by(!!group_var) %>%
    summarise(a = mean(a))
}

my_plot <- function(df, group_var) {
  print(group_var)

  ggplot(data = df %>% 
           group_by(!!group_var) %>%
           summarise(a = mean(a)), 
         aes_string(x = quo_name(group_var), y = "a")) +
    geom_bar(stat = "identity")
}

my_summarise(df, quo(UQ(sym(someString))))

my_plot(df, quo(UQ(sym(someString))))

这些选项可能更简单:

my_summarise <- function(df, group_var) {
  print(group_var)

  df %>%
    #Either works
    group_by_at(.vars = group_var) %>%
    #group_by(!!sym(group_var)) %>%
    summarise(a = mean(a))
}

my_summarise(df,someString)

my_plot <- function(df, group_var) {
  print(group_var)

  ggplot(data = df %>% 
           group_by_at(.vars = group_var) %>%
           #group_by(!!sym(group_var)) %>%
           summarise(a = mean(a)), 
         aes_string(x = group_var, y = "a")) +
    geom_bar(stat = "identity")
}

my_plot(df, someString)

...您可以在其中使用group_bygroup_by_at

my_summarise(df, as.name(someString))调用怎么办?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM