2017-08-01 10 views
0

文字列として指定された変数名(Shinyアプリケーションからの入力など)があり、変数としてあたかもdplyrとggplot2コードで使用したいと思います。dplyr 0.7 - グループ化変数を文字列として指定する

私はそれを試行錯誤して動作させましたが、より良い方法が必要であると感じています。これらの操作を実行するためのより良い方法は何ですか?

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)))) 

答えて

2

どちらのは、おそらく簡単です:あなたはgroup_bygroup_by_atのいずれかを使用することができ

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) 

...。

0

my_summarise(df, as.name(someString))で電話するのはどうですか?これらのオプションの

関連する問題