2016-06-15 19 views
1

2つのグループ化変数の関数としてパーセントを計算するために、dplyrの標準評価を使用しようとしています。問題は私のmutate_ statementにあります。ここでmutate_を使用してグループごとにパーセンテージを計算する標準的な評価

がデータセットである:ここでは

structure(list(
    var1 = structure(c(2L, 1L, 1L, 2L, 1L, 2L, 1L, 
    2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 
    2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 
    2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 
    2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 
    1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 
    2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L 
    ), 
    .Label = c("No", "Yes"), class = "factor"), 
    var2 = structure(c(2L, 2L, 1L, 2L, 
    2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 
    1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 
    1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 
    2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 
    2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 
    1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L 
    ), 
    .Label = c("Female", "Male"), class = "factor")), 
    .Names = c("var1", "var2"), row.names = c(NA, -100L), class = "data.frame") 

は、私が働いているコードです:私は、コードを実行すると

for_plots = function(data, var1, var2){ 
    grouped_data = data %>% group_by_(var1, var2) %>% 
    summarise_(n_in_group = ~n()) %>% 
    mutate_(.dots = setNames(list(
    interp(quote(n_in_group/sum(n_in_group, na.rm = TRUE) * 100), 
      n_in_group = as.name(n_in_group))) 
    )) 
    return(grouped_data) 
} 

、私はエラーが表示されます。

Error in setNames(list(interp(quote(n_in_group/sum(n_in_group, na.rm = TRUE) * : argument "nm" is missing, with no default

何かご意見は?ここで

+1

がSEを使用する理由はありません。関数内でvar名n_in_groupを定義したので、動的入力として扱う必要はありません。 – Frank

+0

@Frankありがとうございます。 for_plots = function(data、var1、var2){ grouped_data = data%>%group_by_(var1、var2)%>% summary%(n_in_group =〜n())%>% mutate(パーセント= (n_in_group/sum(n_in_group、na.rm = TRUE)))* 100) return(grouped_data) } – Chris

答えて

2

はフランクの応答@に基づいて、いくつかのコードです:

for_plots = function(data, var1, var2) { 
    grouped_data = data %>% group_by_(var1, var2) %>% 
    summarise_(n_in_group = ~n()) %>% 
    mutate(percent = (n_in_group/sum(n_in_group, na.rm = TRUE)) * 100) 
    return(grouped_data) 
} 
関連する問題