2017-08-03 10 views
0

dplyrで非標準的な評価についてhttp://dplyr.tidyverse.org/articles/programming.htmlを読んだが、まだ動作させることができない。r dplyr非標準的な評価 - 関数の順序付け棒プロット

plot_column < - のmutate文が無効になっているとき、 "columnA"

raw_data %>% 
    group_by(.dots = plot_column) %>% 
    summarise (percentage = mean(columnB)) %>% 
    filter(percentage > 0) %>% 
    arrange(percentage) %>% 
    # mutate(!!plot_column := factor(!!plot_column, !!plot_column))%>% 
    ggplot() + aes_string(x=plot_column, y="percentage") + 
    geom_bar(stat="identity", width = 0.5) + 
    coord_flip() 

が正常に動作します。ただし、高さでバーを並べ替えるために有効にすると、1つのバーだけが返されます。

上記のステートメントを関数/に変換するにはどうすればよいですか?

例データセットは次のようになります。

columnA,columnB 
a, 1 
a, 0.4 
a, 0.3 
b, 0.5 

編集

サンプル:

mtcars %>% 
    group_by(mpg) %>% 
    summarise (mean_col = mean(cyl)) %>% 
    filter(mean_col > 0) %>% 
    arrange(mean_col) %>% 
    mutate(mpg := factor(mpg, mpg))%>% 
    ggplot() + aes(x=mpg, y=mean_col) + 
    geom_bar(stat="identity") 
    coord_flip() 

意志出力命じた棒グラフ。 これを列に置き換えて複数の棒がある関数にどのようにラップできますか?

答えて

2

これはdplyr 0.7.0とggplot 2.2.1で動作します。私はに走った

rm(list = ls()) 
library(ggplot2) 
library(dplyr) 
raw_data <- tibble(columnA = c("a", "a", "b", "b"), columnB = c(1, 0.4, 0.3, 0.5)) 

plot_col <- function(df, plot_column, val_column){ 

    pc <- enquo(plot_column) 
    vc <- enquo(val_column) 
    pc_name <- quo_name(pc) # generate a name from the enquoted statement! 

    df <- df %>% 
    group_by(!!pc) %>% 
    summarise (percentage = mean(!!vc)) %>% 
    filter(percentage > 0) %>% 
    arrange(percentage) %>% 
    mutate(!!pc_name := factor(!!pc, !!pc)) # insert pc_name here! 

    ggplot(df) + aes_(y = ~percentage, x = substitute(plot_column)) + 
    geom_bar(stat="identity", width = 0.5) + 
    coord_flip() 
} 
plot_col(raw_data, columnA, columnB) 
plot_col(mtcars, mpg, cyl) 

問題は、そのggplotのようなものだったと非標準の評価の異なる種類を使用しdplyr。私はこの質問で答えを得た:Creating a function using ggplot2

EDIT:値の列(例:columnB/cyl)をパラメータ化し、mtcarsの例を追加しました。

+0

まだ100%存在していないようです。私はまだグループごとに1つのバーではなく、1つのバーの元の結果を取得します。 –

+0

ああ申し訳ありませんが、私にチェックさせてください! – friep

+0

それは変だけど、私はRのきれいなセッションをしたし、私のために働いた。これをパッケージのバージョンとともにコードに追加します。 – friep

関連する問題